在mongoose中更新许多[重复]

问题描述 投票:4回答:2

这个问题在这里已有答案:

我有一个非常简单的案例。我想每隔午夜更新我的收藏品。我正在使用node-schedule

schedule.scheduleJob('0 0 * * *', () => {
   Users.updateMany();
});

我想要做的就是遍历我的集合中的每个文档(Users)然后如果User.createdfalse,我想把它变成true

在javascript中它将是:

for (let user in Users) {
   if (user.created === false) {
      user.created = true;
   }
} 

如何在猫鼬中做到这一点?谢谢!

Edit: The story is very simple, I just want to iterate over every element in my db using mongoose and if iterated element has field "created" === false, change it to true.

javascript node.js mongodb mongoose
2个回答
4
投票

首先需要查询才能找到要更新的文档。这很简单:

{"created": false}

然后你需要一个更新查询来告诉mongo如何更新这些文件:

{"$set":{"created": true}}

您需要使用$set运算符指定要更改的字段,否则它将覆盖整个文档。最后,您可以将这些组件组合到单个mongo调用中,并使用其他参数告诉mongo我们要修改多个文档:

User.update({"created": false}, {"$set":{"created": true}}, {"multi": true}, (err, writeResult) => {});

Mongoose尝试密切复制mongo API,因此所有这些信息都可以在MongoDB的文档中找到:https://docs.mongodb.com/manual/reference/method/db.collection.update/


9
投票

您可以使用mongodb的updateMany()方法来更新多个文档

简单的查询是这样的

db.collection.updateMany(filter, update, options)

有关更多uppdate的文档,请阅读here

根据您的要求,更新代码将如下所示:

User.updateMany({"created": false}, {"$set":{"created": true}});

在这里你需要使用$set,因为你只想将创建的从true更改为false。对于参考如果要更改整个doc,则不需要使用$ set

© www.soinside.com 2019 - 2024. All rights reserved.