在mongoose中更新许多[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在mongoose中更新许多[重复]相关的知识,希望对你有一定的参考价值。

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

我有一个非常简单的案例。我想每隔午夜更新我的收藏品。我正在使用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.

答案

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

{"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 更新或插入许多文档

使用 mongoose 在 mongoDb 中更新数组内的对象 [重复]

在tablayout片段之间进行通信[重复]

如何使用 MongoDB/Mongoose 中的先前值更新字段 [重复]

更新了 Mongoose 更新嵌套数组元素 [重复]

Mongoose 在使用 .save() 方法更新文档时抛出 E11000 重复键错误