sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongodb:empuje el elemento a la matriz anidada si se cumple la condición

El problema aquí es que no entiendes muchas cosas.

Cuando haces "outerArray.field.innerArray": { $in: [ 1, 3 ] } en su consulta, no obtiene solo innerArray donde tiene 1 o 3. Obtiene documentos donde existen estas matrices.

Entonces está consultando todo el documento.

Tienes que usar arrayFilter para actualizar los valores cuando el filtro coincida.

Entonces, si te he entendido bien, la consulta que quieres es:

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

Ejemplo aquí

Observe cómo el primer objeto en update esta vacio. Tienes que poner allí el campo para que coincida con el documento (no la matriz, el documento).

Si desea actualizar solo un documento, debe completar el primer objeto (objeto de consulta) con los valores que desee, por ejemplo:{"_id": 11} .