我想要更新嵌套在数组值中的数组值:即set
status = enabled
其中alerts.id = 2
{
"_id" : ObjectId("5496a8ed49847b6cd7c7b350"),
"name" : "joe",
"locations" : [
{
"name": "my location",
"alerts" : [
{
"id" : 1,
"status" : null
},
{
"id" : 2,
"status" : null
}
]
}
]
}
我会使用位置$
字符,但不能在语句中使用它两次 - 还不支持多位置运算符:https://jira.mongodb.org/browse/SERVER-831
如何发出声明以仅更新ID为2的警报的状态字段?
更新
如果我按如下方式更改架构:
{
"_id" : ObjectId("5496ab2149847b6cd7c7b352"),
"name" : "joe",
"locations" : {
"my location" : {
"alerts" : [
{
"id" : 1,
"status" : "enabled"
},
{
"id" : 2,
"status" : "enabled"
}
]
},
"my other location" : {
"alerts" : [
{
"id" : 3,
"status" : null
},
{
"id" : 4,
"status" : null
}
]
}
}
}
然后我可以使用:
update({"locations.my location.alerts.id":1},{$set: {"locations.my location.alerts.$.status": "enabled"}});
问题是我无法在警报ID上创建索引: - (
答案 0 :(得分:1)
最好这样建模,特别是如果需要位置和/或alerts.id的索引。
{
"_id" : ObjectId("5496a8ed49847b6cd7c7b350"),
"name" : "joe",
"location" : "myLocation",
"alerts" : [{
"id" : 1,
"status" : null
},
{
"id" : 2,
"status" : null
}
]
}
{
"_id" : ObjectId("5496a8ed49847b6cd7c7b350"),
"name" : "joe",
"location" : "otherLocation",
"alerts" : [{
"id" : 1,
"status" : null
},
{
"id" : 2,
"status" : null
}
]
}
答案 1 :(得分:-1)
我认为你的工作有错误的工具。您的示例中的内容是关系数据,并且使用关系数据库处理起来要容易得多。所以我建议使用SQL-database而不是mongo。
但是如果你真的想用mongo做,那么我想唯一的选择是获取文件并修改它并将其放回去。