У меня есть такая база данных:
{
"universe":"comics",
"saga":[
{
"name":"x-men",
"characters":[
{
"character":"wolverine",
"picture":"618035022351.png"
},
{
"character":"wolverine",
"picture":"618035022352.png"
}
]
}
]
},
{
"universe":"dc",
"saga":[
{
"name":"spiderman",
"characters":[
{
"character":"venom",
"picture":"618035022353.png"
}
]
}
]
}
И с помощью этого кода я обновляю поле, где name: wolverine
:
db.getCollection('collection').findOneAndUpdate(
{
"universe": "comics"
},
{
$set: {
"saga.$[outer].characters.$[inner].character": "lobezno",
"saga.$[outer].characters.$[inner].picture": "618035022354.png"
}
},
/*{
"saga.characters": 1
},*/
{
"arrayFilters": [
{
"outer.name": "x-men"
},
{
"inner.character": "wolverine"
}
],
"multi":false
}
)
Я хочу просто обновить первый объект где есть совпадение, и остановите его.
Например, если у меня есть массив из 100 000 элементов и объект, в котором есть совпадение, находится на десятой позиции, он обновит эту запись, но он будет продолжить просмотр всего массива, и это кажется мне неэффективным, хотя он уже выполнил обновление.
Примечание: если бы я выполнял обновление, используя _id
внутри universe.saga.characters
, вместо того, чтобы выполнять обновление с помощью name
, все равно l oop через остальные элементы.
Как это сделать?