我有一个非常简单的案例。我想在每个午夜更新我的收藏。
我正在使用node-schedule
:
schedule.scheduleJob('0 0 * * *', () => {
Users.updateMany();
});
我要做的就是遍历集合(Users
)中的每个文档,然后如果User.created
是false
,我想将其转换为{{1} }。
在javascript中,应该是:
true
用猫鼬怎么做?谢谢!
答案 0 :(得分:10)
您可以使用mongodb的 updateMany()
方法来更新多个文档
简单查询就是这样
db.collection.updateMany(filter, update, options)
有关uppdate的更多文档许多信息,请阅读here
根据您的要求,更新代码将如下所示:
User.updateMany({"created": false}, {"$set":{"created": true}});
在这里您需要使用$set,因为您只想将创建的内容从true更改为false。对于参考。如果要更改整个文档,则无需使用 $ set
答案 1 :(得分:5)
首先,您需要查询以查找要更新的文档。这很简单:
{"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/