FindAndModify,返回对象数组

mon*_*ser 2 mongodb

我正在尝试修改多个文档findAndModify,然后返回修改的新文档.我的查询是:

db.users.findAndModify({
  query: {
    _id: {
      $in: [
        ObjectId("54061f3c27afac4b44688c1d"),
        ObjectId("54061f3c27afac4b44688c1e")
      ]
    }
  },
  update: {
    $inc: {
      i: 1
    }
  },
  new: true
});
Run Code Online (Sandbox Code Playgroud)

但只能检索一个文档.我的目标是修改多个文档,并返回所有文档.是否可以检索文档数组?

Jua*_*rah 5

如文档中的此页面所述,findAndModify"修改并返回单个文档".如果要使用修改多个文档findAndModify,则必须为每个文档运行一次.在mongoshell中,您可以通过以下某些JavaScript实现:

var oids = [ObjectId("54061f3c27afac4b44688c1d"),
            ObjectId("54061f3c27afac4b44688c1e")];
docs = [];
for (var i in oids) {
    id = oids[i];
    doc = db.e.findAndModify({
        "query": { "_id": id },
        "update": { "$inc": { "i": 1 }},
        "new": true
    });
    docs.push(doc);
}
printjson(docs);
Run Code Online (Sandbox Code Playgroud)

另一个选择是将运行update使用multi作为一个选项,然后检索文档.您的代码看起来如下所示:

db.users.update(
    { "_id": {
        "$in": [ObjectId("54061f3c27afac4b44688c1d"),
                ObjectId("54061f3c27afac4b44688c1e")]
        }
    },
    { "$inc": { "i": 1 }},
    { "multi": true }
);
db.users.find(
    { "_id": {
        "$in": [ObjectId("54061f3c27afac4b44688c1d"),
                ObjectId("54061f3c27afac4b44688c1e")]
        }
    }
);
Run Code Online (Sandbox Code Playgroud)