我正在开发一个表规划器应用程序,其中可以将客人分配到表中。表格模型具有以下架构:
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);
来宾可以在App (使用React DND)中拖放到"Table“React组件中。当被放到一个表上时,会向Node.js方法发出一个Axios POST请求,以更新数据库并将客户的对象ID添加到表模型中的一个数组中:
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');
};
这是按照预期工作的,除了每次删除来宾时,表模型的来宾数组都会用相同的来宾对象ID更新两次?有人知道为什么会这样吗?
我已经尝试记录req.body.guestID
,以确保它是单个值,并检查此函数没有被调用两次。但这些测试都没有带来意想不到的结果。因此我怀疑我的findOneAndUpdate
查询出了什么问题?
发布于 2020-06-14 09:10:20
我不确定addToSet是否是最好的解决方案,因为查询被执行两次。
如果同时使用回调和promise,则会使查询执行两次。
所以选择其中一个会让它工作得很好。
如下所示:
async updateField({ fieldName, shop_id, item }) {
return Shop.findByIdAndUpdate(
shop_id,
{ $push: { menuItems: item } },
{ upsert: true, new: true }
);
}
https://stackoverflow.com/questions/50355473
复制相似问题