MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongodb:invia l'elemento all'array nidificato se la condizione è soddisfatta

Il problema qui è il tuo malinteso su una copula.

Quando esegui "outerArray.field.innerArray": { $in: [ 1, 3 ] } nella tua query, non stai ricevendo solo innerArray dove ha 1 o 3. Stai ottenendo documenti dove esistono questi array.

Quindi stai interrogando l'intero documento.

Devi usare arrayFilter per aggiornare i valori quando il filtro corrisponde.

Quindi, se ho capito bene, la query che desideri è:

db.collection.update(
{}, //Empty object to find all documents
{
  $push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
  "arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})

Esempio qui

Nota come il primo oggetto in update è vuoto. Devi mettere lì il campo per abbinare il documento (non l'array, il documento).

Se vuoi aggiornare un solo documento devi riempire il primo oggetto (oggetto query) con i valori che vuoi, ad esempio:{"_id": 11} .