我有一个这样的数据库:
{
"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
,它仍然会循环遍历其余元素。
我该怎么做?