Така че първото нещо, което трябва да се каже тук, е $elemMatch
не е задължителен във вашия случай, тъй като искате да съпоставите само с един свойство на масива. Използвате този оператор, когато имате нужда от "две или повече" свойства от един и същ елемент на масива, за да отговарят на вашите условия. В противен случай просто използвате "точкова нотация" като стандарт.
Вторият случай тук е с $push
, където този конкретен оператор означава "добавяне" на елементи към масива. Във вашия случай просто искате да „актуализирате“, така че правилният оператор тук е $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Така че позиционният $
операторът ето това, което съответства на "намерения индекс" от елемента на масива и позволява $set
оператор, за да "промените" елементите, съответстващи на тази "позиция".