Quindi la prima cosa da dire qui è il $elemMatch
non è richiesto nel tuo caso poiché vuoi solo abbinare su una singola proprietà dell'array. Usi quell'operatore quando hai bisogno di "due o più" proprietà dallo stesso elemento dell'array per soddisfare le tue condizioni. Altrimenti usi semplicemente la "notazione del punto" come standard.
Il secondo caso qui è con $push
, dove quel particolare operatore intende "aggiungere" elementi all'array. Nel tuo caso vuoi solo "aggiornare", quindi l'operatore corretto qui è $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Quindi il posizionale $
operatore qui è ciò che corrisponde all'"indice trovato" dall'elemento dell'array e consente il $set
operatore per "cambiare" gli elementi abbinati in quella "posizione".