在mongoose中更新许多[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在mongoose中更新许多[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有一个非常简单的案例。我想每隔午夜更新我的收藏品。我正在使用node-schedule
:
schedule.scheduleJob('0 0 * * *', () => {
Users.updateMany();
});
我想要做的就是遍历我的集合中的每个文档(Users
)然后如果User.created
是false
,我想把它变成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.
答案
首先需要查询才能找到要更新的文档。这很简单:
{"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/
另一答案
您可以使用mongodb的updateMany()
方法来更新多个文档
简单的查询是这样的
db.collection.updateMany(filter, update, options)
有关更多uppdate的文档,请阅读here
根据您的要求,更新代码将如下所示:
User.updateMany({"created": false}, {"$set":{"created": true}});
在这里你需要使用$set,因为你只想将创建的从true更改为false。对于参考如果要更改整个doc,则不需要使用$ set
以上是关于在mongoose中更新许多[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 mongoose 在 mongoDb 中更新数组内的对象 [重复]