FindAndModify,返回对象数组

时间:2015-02-27 13:51:17

标签: mongodb

我正在尝试使用findAndModify修改多个文档,然后返回修改的新文档。 我的疑问是:

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

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

1 个答案:

答案 0 :(得分:5)

正如文档this page中所述,findAndModify“修改并返回单个文档”。如果要使用findAndModify修改多个文档,则必须为每个文档运行一次。在mongo shell中,您可以使用以下某些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);

另一种选择是使用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")]
        }
    }
);