【问题标题】:Update many in mongoose [duplicate]在猫鼬中更新许多[重复]
【发布时间】:2019-07-26 07:55:39
【问题描述】:

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

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

编辑:故事很简单,我只想使用 mongoose 迭代我的数据库中的每个元素,如果迭代元素的字段“created”=== false,则将其更改为 true。

【问题讨论】:

  • @CharlieSchliesser 它适用于许多元素吗?还是只有一个?
  • 您是否点击了问题并阅读了它和答案?我相信一切都在那里。我建议搜索“mongoose update where”来更新与 Mongoose 中的 where 子句匹配的所有文档。
  • 仅供参考,假设 created 是必需属性,您的示例不需要条件。您只是想为每个用户设置created: true

标签: javascript node.js mongodb mongoose


【解决方案1】:

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

{"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/

【讨论】:

  • 谢谢,但我需要猫鼬解决方案
  • @Patrickkx,答案是猫鼬。我稍微编辑了它以反映您的代码 sn-ps
  • 什么是writeResult?如果我只想为选定条目添加 "created" : true 怎么办?只喜欢这些,date > 100?如何添加条件?
  • @Patrickkx 你可以写任何东西来代替writeResult,比如doc ..doc) => { if (doc) return res.send(doc);。对于日期,您需要输入if 条件。
  • 等待 User.updateMany({ created: false }, {"$set":{"created": true}} )。只是这会工作!如果您想等待成功或错误,您可以使用 async/await。使用 mongoose updateMany() 您不需要选项中的 {multi:true} 。我以前用它来更新多个文档
【解决方案2】:

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

简单查询是这样的

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

更多更新文档请阅读here

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

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

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

【讨论】:

  • 谢谢!如果我想添加一些条件怎么办?对于所有那些“创建”为假的条目?比如:({ created: false }, () => { if (selected.date > 100) { do something } })?
  • 为此您需要使用aggregation
  • 你能举个例子吗?
  • @Patrickkx 提出带有完整描述的新问题。我一定会帮助你的。
猜你喜欢
  • 2016-05-14
  • 1970-01-01
  • 2020-10-18
  • 2015-09-09
  • 2020-08-05
  • 2015-06-03
  • 2016-01-13
  • 2016-05-16
  • 2012-03-28
相关资源
最近更新 更多