Пн goose обновление динамически вложенного объекта - PullRequest
0 голосов
/ 26 апреля 2020

Итак .. новенькое здесь, поэтому, пожалуйста, с пониманием. У этой модели схемы:

const mongoose = require('mongoose');
   const tableSchema = new mongoose.Schema(
 {
   name: {
     type: String,
     required: [true, 'A table must have a name']
   },
   tId: {
     type: String,
     required: [true, 'A table must have it own ID'],
     unique: true
   },

   activePlayers: [{ type: mongoose.Schema.ObjectId, ref: 'Player' }],
   cashDrop: Number,
   float: {
     c5000: Number,
     c1000: Number,
     c500: Number,
     c100: Number,
     c5: Number
   },
   cashLog: [
     {
       cId: Number,
       amount: Number
     }
   ]
 },
 {
   toJSON: { virtuals: true },
   toObject: { virtuals: true }
 }
);

const Table = mongoose.model('Table', tableSchema);
module.exports = Table;

И самое болезненное обновление документа. Как я понимаю, у нас есть 3 различных «типа» для обновления:

  1. Добавление нового элемента в activePlayers и cashLog => (нажатие на элемент в массив)
  2. Изменить float Объект
  3. Обновление документа Имя tId

Итак, у меня есть этот контроллер для патча :

const updateTable = async (req,res,next) => {
  const {activePlayers,cashLog, float} = req.body;
  let updated = activePlayers
    ? await Table.findByIdAndUpdate(
        req.params.id,
        { $push: { activePlayers } },
        { new: true, runValidators: true, upsert: true }
      )
    : cashLog
    ? await Table.findByIdAndUpdate(
        req.params.id,
        { $push: { cashLog } },
        { new: true, runValidators: true, upsert: true }
      )
 /*   : float
    ? await Table.findByIdAndUpdate(
        req.params.id,
        { $set: { float } },
        { new: true, runValidators: true, upsert: true }
      )
*/
    : await Table.findByIdAndUpdate(req.params.id, req.body,
       { new: true, runValidators: true, upsert: true } )
}

конечно .. код упакован в try / catch с ошибками обработки .. Иногда float внутри может содержать только c5000 , и обновление другого значение (например: c100 ) и т. д. Как это реализовать? Как работать с вложенным объектом в пн goose? Должен ли я переопределить схему ?? Или сделать другую коллекцию для хранения float ? Заранее спасибо. Хороший день

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...