MongoDB - 更新嵌入式文档和文档本身

时间:2016-07-18 10:23:11

标签: mongodb mongodb-query

是否可以在一个查询中更新此文档中的文档和嵌入数组元素?

E.g。

Team:
{
   MembersCount: 1,
   Members: [
      {
         Id: 1,
         Role: 1
       }]
 }

示例查询必须increment MemberCountpush an element to Members arraychange the first member's role

我的研究表明,您可以更新文档或更新数组的元素,但不能更新两者,因为查询必须指向文档或特定元素,但也许我错过了某些内容

编辑: 现在我知道将一个元素添加到Scores数组并修改同一个数组中的其他元素是不可能的(这个元素的索引会改变 - 这就是我的解释)。

1 个答案:

答案 0 :(得分:0)

正如您所发现的那样,在同时更新数组时不能添加数组。在MongoDB v3.2中,您应该看到一条错误消息:

Cannot update 'Members.0.Role' and 'Members' at the same time

另一种方法是利用cursor.forEach()。 例如:

/* Find a document using _id */
db.collection.find({
                     "_id":ObjectId("578cda18006d485d118c3b79")
                  })
                  .forEach(function(doc){
                                 /* Increment MemberCount */
                                 doc['MemberCount']+=1; 
                                 /* Push an element to Members array */
                                 doc["Members"].push({"Id":2, "Role":9});
                                 /* Change the first member's role */
                                 doc["Members"][0]["Role"] = 3;
                                 /* Save*/
                                 db.collection.save(doc)
                                })

虽然您需要重新考虑这是否适合您的应用程序用例data model