Итак .. новенькое здесь, поэтому, пожалуйста, с пониманием. У этой модели схемы:
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 различных «типа» для обновления:
- Добавление нового элемента в activePlayers и cashLog => (нажатие на элемент в массив)
- Изменить float Объект
- Обновление документа Имя 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 ? Заранее спасибо. Хороший день