在Mongoose中一次更新多个文档的最佳方法

时间:2019-08-21 04:34:07

标签: node.js mongodb mongoose mongoose-schema

我想使用Mongoose在我的Node.js后端中通过条件更新多种设计

尝试更新列表中所有用户的可见通知。

我当前的方法有效,但是涉及很多调用

  await notificationIDs.forEach(async noticeID => {
        await User.updateOne(
          { "notifications._id": noticeID },
          { $set: { "notifications.$.seen": true } }
        );
      });

想在一个电话中更新

3 个答案:

答案 0 :(得分:0)

要对一个查询执行此操作,可以将updateMany()方法与$in运算符配合使用:

await User.updateMany(
  { "notifications._id": {$in: notificationIDs} },
  { $set: { "notifications.$.seen": true } }
);

答案 1 :(得分:0)

您可以使用:

更新它
 await User.update({ "notifications._id": {$in: notificationIDs} },
                       { $set: { "notifications.$.seen": true } },
                       {multi: true});

答案 2 :(得分:0)

要对单个查询执行此操作,请使用db.collection.updateMany()。

 return new Promise((resolve, reject) => {
    UserModel.updateMany({ "notifications._id": notificationIDs }, {$set: { "notifications.$.seen": true } }, { upsert: true, new: true }).exec((err, response) => {
        if (err) {
            reject({ status: 500, message: 'Internal Server Error', data: err });
        } else {
            resolve({ status: 200, message: 'Notification Updated Successfully.' });
        }
    });
});