更新许多猫鼬

Pat*_*kkx 7 javascript mongoose mongodb node.js

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

schedule.scheduleJob('0 0 * * *', () => {
   Users.updateMany();
});
Run Code Online (Sandbox Code Playgroud)

我要做的就是遍历我的collection(Users)中的每个文档,如果User.createdfalse,我想将其转换为true

在javascript中,它将是:

for (let user in Users) {
   if (user.created === false) {
      user.created = true;
   }
} 
Run Code Online (Sandbox Code Playgroud)

用猫鼬怎么做?谢谢!

编辑:故事很简单,我只想使用猫鼬对数据库中的每个元素进行迭代,如果迭代的元素具有字段“ created”(创建)=== false,请将其更改为true。

Har*_*tel 21

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

简单的查询是这样的

db.collection.updateMany(filter, update, options)
Run Code Online (Sandbox Code Playgroud)

对于阅读uppdateMany的更多文档在这里

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

User.updateMany({"created": false}, {"$set":{"created": true}});
Run Code Online (Sandbox Code Playgroud)

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


Jac*_*ull 10

您首先需要查询以查找要更新的文档。这很简单:

{"created": false}
Run Code Online (Sandbox Code Playgroud)

然后,您需要一个更新查询来告诉mongo如何更新那些文档:

{"$set":{"created": true}}
Run Code Online (Sandbox Code Playgroud)

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

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

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