通过在 body、mongoose/mongodb 中提供文档来更新多个文档

Posted

技术标签:

【中文标题】通过在 body、mongoose/mongodb 中提供文档来更新多个文档【英文标题】:Update multiple documents by providing documents in body, mongoose/mongodb 【发布时间】:2014-12-28 15:03:01 【问题描述】:

我需要通过在正文中提供多个文档来更新它们。我无法查询,必须提供。

例子:

 var persons = [
    id: 1, name'Joe', active: false, 
    id:2, name:'Jane', active: false)
];

此数据在正文中提供,我想将 active 属性设置为 false。

exports.setActivePropertyOnPersons = function(input,callback)
  for(var i = 0;i<input.body.length;i++)
    mongoose.model('person').findOne(id:input.body[i].id, function(err, person)
      person.active = false;
      person.save();
    )
  
  callback.send(200)
;

这段代码感觉不好。有没有更好的查询来做到这一点?我在文档中没有找到任何内容。

【问题讨论】:

【参考方案1】:

尝试将更新命令与“$in”运算符一起使用:

var ids= [];
for (var i=0 i<input.body.length; ++i) 
    ids.push(input.body[i].id);


mongoose.model('person').update( id : "$in":ids, active:false , multi: true , function(err,docs)  ... );

希望对你有帮助

【讨论】:

这是通过$in 选择多个文档的基本方法,但.update() 命令需要"multi" 参数才能实际更改比匹配的第一个文档更多。跨度> 你将如何处理活动变量中的不同值?

以上是关于通过在 body、mongoose/mongodb 中提供文档来更新多个文档的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose / Mongodb 迁移到 MySQL

mongoose/mongodb 不会用 PUT 更新

$gte 和 $lte 在 Mongoose/MongoDB 中没有按预期工作

无法使用函数(req,res,next,id)mongoose(mongodb)中的动态id字段进行查询

详解node+mongoose+mongoDb(mongoDb安装运行,在node中链接)

mongoose \ mongodb 按一些列表排序? [复制]