问题描述
以下是MongoDB文档:
Following is a MongoDB document:
{
"_id" : 2,
"mem_id" : M002,
"email" : "[email protected]",
"event_type" : [
{
"name" : "MT",
"count" : 1,
"language" : [
{
"name" : "English",
"count" : 1,
"genre" : [
{
"name" : "Action",
"count" : 6
},
{
"name" : "Sci-Fi",
"count" : 3
}
],
"cast" : [
{
"name" : "Sam Wortington",
"count" : 2
},
{
"name" : "Bruce Willis",
"count" : 4
},
{
"name" : "Will Smith",
"count" : 7
},
{
"name" : "Irfan Khan",
"count" : 1
}
]
}
]
}
]
}
由于嵌套,我无法更新数组类型的字段,特别是event_type,语言,体裁和演员表.基本上,我想更新所有提到的四个字段以及每个和子文档的计数字段.如果值是新的,则update语句应在树中插入一个值,否则应增加该值的计数.
mongo shell中的查询可以是什么?谢谢
I'm not able to update fields that is of type array, specially event_type, language, genre and cast because of nesting. Basically, I wanted to update all the four mentioned fields along with count field for each and subdocuments. The update statement should insert a value to the tree if the value is new else should increment the count for that value.
What can be the query in mongo shell?Thanks
推荐答案
您直接遇到了MongoDB当前的限制之一.问题在于引擎不支持多个位置运算符.参见将位置$操作符多次用于更新嵌套数组
You are directly hitting one of the current limitations of MongoDB.The problem is that the engine does not support several positional operators.See this Multiple use of the positional `$` operator to update nested arrays
为此有一张公开票: https://jira.mongodb.org/browse/SERVER-831 (在此也有提及)
There is an open ticket for this: https://jira.mongodb.org/browse/SERVER-831 (mentioned also there)
您还可以阅读有关如何更改数据模型的内容:更新mongodb中的嵌套数组
You can also read this one on how to change your data model: Updating nested arrays in mongodb
如果您认为可行,则可以执行以下操作:
If it is feasible for you, you can do:
db.collection.update({_id:2,"event_type.name":'MT' ,"event_type.language.name":'English'},{$set:{"event_type.0.language.$.count":<number>}})
db.collection.update({_id:2,"event_type.name":'MT' ,"event_type.language.name":'English'},{$set:{"event_type.$.language.0.count":<number>}})
但是你不能做:
db.collection.update({_id:2,"event_type.name":'MT' ,"event_type.language.name":'English'},{$set:{"event_type.$.language.$.count":<number>}})
这篇关于通过mongo shell更新mongoDB中的嵌套数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!