Donc la première chose à dire ici est le $elemMatch
n'est pas nécessaire dans votre cas car vous ne voulez faire correspondre qu'une seule propriété de tableau. Vous utilisez cet opérateur lorsque vous avez besoin de "deux propriétés ou plus" du même élément de tableau pour répondre à vos conditions. Sinon, vous utilisez simplement la "notation par points" comme norme.
Le deuxième cas ici est avec $push
, où cet opérateur particulier signifie "ajouter" des éléments au tableau. Dans votre cas, vous voulez juste "mettre à jour" donc le bon opérateur ici est $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Donc la position $
l'opérateur ici est ce qui correspond à "l'index trouvé" de l'élément du tableau et autorise le $set
opérateur pour "changer" les éléments correspondant à cette "position".