Le problème ici est votre malentendu sur certaines choses.
Lorsque vous faites "outerArray.field.innerArray": { $in: [ 1, 3 ] }
dans votre requête, vous n'obtenez pas seulement innerArray
où a 1 ou 3. Vous obtenez des documents là où existent ces tableaux.
Vous interrogez donc l'ensemble du document.
Vous devez utiliser arrayFilter
pour mettre à jour les valeurs lorsque le filtre correspond.
Donc, si je vous ai bien compris, la requête que vous voulez est :
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
Exemple ici
Notez comment le premier objet dans update
est vide. Vous devez y mettre le champ correspondant au document (pas le tableau, le document).
Si vous souhaitez mettre à jour un seul document, vous devez remplir le premier objet (objet de requête) avec les valeurs souhaitées, par exemple :{"_id": 11}
.