我在一个集合中有多个文档,每个文档都有这样的数据结构:
{
_id: "some object id",
data1: [
{
data2_id : 13233,
data2: [
{
sub_data1: "text1",
sub_data2: "text2",
sub_data3: "text3",
},
{
sub_data1: "text4",
sub_data2: "text5",
sub_data3: "text6",
}
]
},
{
data2_id : 53233,
data2: [
{
sub_data1: "text4",
sub_data2: "text5",
sub_data3: "text6",
}
...
]
},
{
data2_id : 56233,
data2: [
{
sub_data1: "text7",
sub_data2: "text8",
sub_data3: "text9",
}
...
]
},
{
data2_id : 53236,
data2: [
{
sub_data1: "text10",
sub_data2: "text22",
sub_data3: "text33",
}
...
]
}
]
}
我想更新为一组匹配某些条件的ID,只更新文档中的子对象。
我试过这个:
db.collection.update({
"$and": [
{
"_id": {
"$in": [
{
"$id": "54369aca9bc25af3ca8b4568"
},
{
"$id": "54369aca9bc25af3ca8b4562"
}
]
}
},
{
"data1.data2": {
"$elemMatch": {
"sub_data1": "text4",
"sub_data2": "text5"
}
}
}
]
},
{
"data1.data2.$.sub_data3" : "text updated"
}
)
但是我收到以下错误:
将数据更新到MongoDB失败:dev。**。com:27017:无法使用部分(data1.data2.0.sub_data3的data2)遍历元素...
任何想法?
答案 0 :(得分:0)
在尝试更新嵌套在另一个数组中的数组元素时,存在一个开放问题here,这会产生一个限制。
此外,您可以在此处进行一些改进:
对于您的查询,您并不需要$和
db.collection.update( { “_ID”: { “$ in”:[ {“$ id”:“54369aca9bc25af3ca8b4568”}, {“$ id”:“54369aca9bc25af3ca8b4562”} ]}, “data1.data2”:{ “$ elemMatch”:{ “sub_data1”:“text4”, “sub_data2”:“text5” } },{..更新...})
您可能想要使用$ set:
db.collection.update(query,{$ set:{“name”:“Mike”}})
否则,您可能会丢失文档中的其余数据。