Så det första att säga här är $elemMatch
krävs inte i ditt fall eftersom du bara vill matcha på en enstaka array-egenskap. Du använder den operatorn när du behöver "två eller fler" egenskaper från samma arrayelement för att matcha dina villkor. Annars använder du bara "dot notation" som standard.
Det andra fallet här är med $push
, där den specifika operatorn betyder att "lägga till" element till arrayen. I ditt fall vill du bara "uppdatera" så att rätt operator här är $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Så den positionella $
operatorn här är vad som matchar "found index" från arrayelementet och tillåter $set
operatör för att "ändra" de element som matchas vid den "positionen".