Я хочу, чтобы обновить значение массива, который вложен в пределах значения массива: тоестьКак обновить значение вложенного массива в mongodb?
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
Как подать заявление t o обновлять только поле статуса оповещения, соответствующее идентификатору 2?
UPDATE
Если изменить схему следующим образом:
{
"_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: - (
Возможно, вам захочется пересмотреть вашу модель данных, если это возможно. Вложенные массивы вроде этого сложны для работы в MongoDB. – Tommi
Спасибо за ответ Tommi, кажется, многопозиционные операторы https://jira.mongodb.org/browse/SERVER-831 – Chev