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

Mongodb actualiza el elemento específico del subarreglo

El problema en su código es dot-notation porque cuando especifica la notación de puntos, asume que los criterios de filtro especificados deben coincidir con el único elemento de matriz que satisface todos los criterios. Pero no es así. La notación de puntos en las matrices puede seleccionar cualquier elemento de la matriz si coincide algún criterio único. Es por eso que está recibiendo la actualización inesperada.

Tienes que usar $elemMatch para hacer coincidir todos los filtros en el array elemento.

db.coll.update({
'_id' : 28,
n: { 
   $elemMatch:{
       a : new ObjectId('4ef85a3e46b3b84408000000'),
       c : 28 }
   }
},
{
  $push : {
     'n.$.p' : ObjectId("4b97e62bf1d8c7152c9ccb74")
  },
  $set : {
     'n.$.t' : ISODate("2013-05-13T14:22:46.777Z")
  }
})

y la salida es

    {
        "a" : ObjectId("4ef85a3e46b3b84408000000"),
        "c" : 28,
        "p" : [
            ObjectId("4f00631046b3b85002000000"),
            ObjectId("4b97e62bf1d8c7152c9ccb74")
        ],
        "t" : ISODate("2013-05-13T14:22:46.777Z"),
        "u" : 26
    }