我有这样的数据结构:
我们有一些中心
。 中心
有一些开关
。 开关
有一些端口
。
{
"_id" : ObjectId("561ad881755a021904c00fb5"),
"Name" : "center1",
"Switches" : [
{
"Ports" : [
{
"PortNumber" : 2,
"Status" : "Empty"
},
{
"PortNumber" : 5,
"Status" : "Used"
},
{
"PortNumber" : 7,
"Status" : "Used"
}
]
}
]
}
我只想编写一个更新查询,将 PortNumber
为 5 的端口的 Status
更改为“Empty”。
当我知道端口的数组索引(此处数组索引为 1)时,我可以使用此查询更新它:
db.colection.update(
// query
{
_id: ObjectId("561ad881755a021904c00fb5")
},
// update
{
$set : { "Switches.0.Ports.1.Status" : "Empty" }
}
);
但是我不知道那个端口的数组索引。
感谢您的帮助。
最佳答案
您通常会使用位置运算符 $
来执行此操作,如该问题的答案中所述:
Update field in exact element array in MongoDB
遗憾的是,目前位置运算符仅支持一个数组级深度匹配。
对于您想要的那种行为,有一张 JIRA 票证:https://jira.mongodb.org/browse/SERVER-831
如果您可以将 Switches
改为一个对象,您可以这样做:
db.colection.update(
{
_id: ObjectId("561ad881755a021904c00fb5"),
"Switch.Ports.PortNumber": 5
},
{
$set: {
"Switch.Ports.$.Status": "Empty"
}
}
)
关于MongoDB:通过匹配该项目的另一个字段来更新数组中项目的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33171078/