我想知道是否可以更新属性的嵌入式嵌入值(有两个深层次)?
例如,如果我有以下文件:
{
_id: ObjectId("5372523e4f611ef8255c5735"),
places: [
{
idPlace: 2,
namePlace: "Name of the place 2",
typePlace: "Type of the place 2"
},
screens: [
{
idScreen: 1,
nameScreen: "Name 1 of the screen",
statusScreen: false
},
{
idScreen: 2,
nameScreen: "Name 2 of the screen",
statusScreen: false
},
{
idScreen: 3,
nameScreen: "Name 3 of the screen",
statusScreen: false
}
},
{
idPlace: 3,
namePlace: "Name of the place 3",
typePlace: "Type of the place 3"
},
screens: [
{
idScreen: 5,
nameScreen: "Name 5 of the screen",
statusScreen: false
},
{
idScreen: 6,
nameScreen: "Name 6 of the screen",
statusScreen: false
},
{
idScreen: 7,
nameScreen: "Name 7 of the screen",
statusScreen: false
}
}
]
}
我想将'statusScreen'
的属性'idScreen': 5
的值修改为true
。所以我尝试了以下命令(根据帖子Updating embedded document property in Mongodb):
db.mycollection.update( {'places.screens': {$elemMatch: {'idScreen': 5} }}, { $set: { "online": true }}, { multi: true } );
但这会在我的文档根目录中创建一个属性'online': true
,并且不会修改我所需属性的值。
你知道出了什么问题吗?
最佳卢瓦克
答案 0 :(得分:0)
理论上,您应该使用位置运算符$来匹配特定项并更新它。但问题是你需要使用两个位置运算符$来匹配位置中的位置并匹配屏幕中的位置。不幸的是,还不支持使用两个位置运算符,请参阅https://jira.mongodb.org/browse/SERVER-831。
因此,您无法在一个查询中更新文档。
但是,您可以使用{' places.screens.idScreen':5}}查询找到所有必要的文档,然后根据数组中的已知位置更新文档。
编辑:更新数组中特定元素的代码
db.coll.update(
{'places.screens.idScreen': 5},
{$set:{"places.0.screens.0.statusScreen":true}}
)