Problemet här är att du missförstår en rad saker.
När du gör "outerArray.field.innerArray": { $in: [ 1, 3 ] }
i din fråga får du inte bara innerArray
där har 1 eller 3. Du får dokument där dessa arrayer finns.
Så du frågar efter hela dokumentet.
Du måste använda arrayFilter
för att uppdatera värden när filtret matchar.
Så om jag har förstått dig rätt är frågan du vill ha:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
Exempel här
Notera hur det första objektet i update
är tom. Du måste placera fältet där för att matcha dokumentet (inte arrayen, dokumentet).
Om du bara vill uppdatera ett dokument måste du fylla det första objektet (frågeobjekt) med värden du vill ha, till exempel:{"_id": 11}
.