是否可以在一个查询中更新此文档中的文档和嵌入数组元素?
E.g。
Team:
{
MembersCount: 1,
Members: [
{
Id: 1,
Role: 1
}]
}
示例查询必须increment MemberCount
,push an element to Members array
和change the first member's role
。
我的研究表明,您可以更新文档或更新数组的元素,但不能更新两者,因为查询必须指向文档或特定元素,但也许我错过了某些内容
编辑: 现在我知道将一个元素添加到Scores数组并修改同一个数组中的其他元素是不可能的(这个元素的索引会改变 - 这就是我的解释)。
答案 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。