Я работаю над приложением для планирования таблиц, где гости могут быть назначены на столы.Модель таблицы имеет следующую схему:
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const tableSchema = new mongoose.Schema({
name: {
type: String,
required: 'Please provide the name of the table',
trim: true,
},
capacity: {
type: Number,
required: 'Please provide the capacity of the table',
},
guests: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Guest',
}],
});
module.exports = mongoose.model('Table', tableSchema);
Гостей можно перетаскивать в приложении (используя React DND) для «таблицы» компонентов React.После отбрасывания на таблицу POST-запрос Axios делается для метода Node.js, чтобы обновить базу данных и добавить идентификатор объекта гостя в массив в модели таблицы:
exports.updateTableGuests = async (req, res) => {
console.log(req.body.guestId);
await Table.findOneAndUpdate(
{ name: req.body.tablename },
{ $push: { guests: req.body.guestId } },
{ safe: true, upsert: true },
(err) => {
if (err) {
console.log(err);
} else {
// do stuff
}
},
);
res.send('back');
};
Это работает какожидается, за исключением того, что с каждым отброшенным гостем массив гостей модели таблицы обновляется с одинаковым гостевым идентификатором объекта дважды?Кто-нибудь знает, почему это будет?
Я попытался зарегистрировать req.body.guestID
, чтобы убедиться, что это одно значение, а также чтобы убедиться, что эта функция не вызывается дважды.Но ни один из этих тестов не принес неожиданных результатов.Поэтому я подозреваю, что что-то не так с моим findOneAndUpdate
запросом?