首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >更新查询将ObjectID添加到数组两次

更新查询将ObjectID添加到数组两次
EN

Stack Overflow用户
提问于 2018-05-16 00:50:02
回答 1查看 1K关注 0票数 4

我正在开发一个表规划器应用程序,其中可以将客人分配到表中。表格模型具有以下架构:

代码语言:javascript
复制
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添加到表模型中的一个数组中:

代码语言:javascript
复制
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查询出了什么问题?

EN

回答 1

Stack Overflow用户

发布于 2020-06-14 09:10:20

我不确定addToSet是否是最好的解决方案,因为查询被执行两次。

如果同时使用回调和promise,则会使查询执行两次。

所以选择其中一个会让它工作得很好。

如下所示:

代码语言:javascript
复制
async updateField({ fieldName, shop_id, item }) {
    return Shop.findByIdAndUpdate(
      shop_id,
      { $push: { menuItems: item } },
      { upsert: true, new: true }
    );
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50355473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档