Я бы хотел обновить свойство из объектов, расположенных в нескольких списках в документе коллекции MongoDB.
В коллекции MongoDB у меня есть такие документы:
{
"firstArray": [
{
"name": "john",
"updated": false // I wanna switch that to true
},
{
"name": "bob",
"updated": false
}
],
"secondArray": [
{
"name": "eric",
"updated": false
},
{
"name": "john",
"updated": false // I wanna switch that to true
}
]
}
My цель состоит в том, чтобы обновить каждый элемент с помощью "name":"john"
из свойств документа firstArray
и secondArray
до updated:true
.
Поскольку они могут быть параллельным доступом к документу, я буду использовать только операторы обновления (метод чтения и замены подобный этому добавил бы риск отбрасывания изменений, внесенных другим процессом)
Похоже на отфильтрованный позиционный оператор $ [] как уже упоминалось в , этот вопрос - это способ go обновить свойство объекта из массива документа НО и, похоже, не поддерживает множественные $set
с одним и тем же оператором или с использованием двух операторов (по одному в массиве) в двух разных $set
!
Поскольку эта команда оболочки mon go только обновляет secondArray
:
db['collection'].update(
{},
{
"$set": { "firstArray.$[elem].updated": true },
"$set": { "secondArray.$[elem].updated": true }
},
{ "arrayFilters": [{ "elem.name": "john" }], "multi": true })
И эта команда eturns The array filter for identifier 'a' was not used in the update { $set: { secondArray.$[b].updated: true } }
:
db['collection'].update(
{},
{
"$set": { "firstArray.$[a].updated": true },
"$set": { "secondArray.$[b].updated": true }
},
{ "arrayFilters": [{ "a.name": "john" }, { "b.name": "john" }], "multi": true })
Итак, вы не знаете, как сделать это обновление? (Бонусный балл за любую документацию цитаты о вышеуказанных ограничениях)
Спасибо!