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".