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

Meteor mongo actualizando matriz anidada

Así que lo primero que hay que decir aquí es $elemMatch no es necesario en su caso, ya que solo desea hacer coincidir una sola propiedad de matriz. Utiliza ese operador cuando necesita "dos o más" propiedades del mismo elemento de matriz para que coincidan con sus condiciones. De lo contrario, solo usa la "notación de puntos" como estándar.

El segundo caso aquí es con $push , donde ese operador en particular significa "agregar" elementos a la matriz. En su caso, solo desea "actualizar", por lo que el operador correcto aquí es $set :

Activity.update(
    { "_id": activityId, "usersActivities.userId": Meteor.userId() },
    {
        "$set": {
            'usersActivities.$.startDate': start,
            'usersActivities.$.endDate': end
        }
    }
)

Así que el $ posicional operador aquí es lo que coincide con el "índice encontrado" del elemento de matriz y permite el $set operador para "cambiar" los elementos coincidentes en esa "posición".