Więc pierwszą rzeczą do powiedzenia jest $elemMatch
nie jest wymagane w twoim przypadku, ponieważ chcesz dopasować tylko jedną właściwość tablicy. Używasz tego operatora, gdy potrzebujesz "dwóch lub więcej" właściwości z tego samego elementu tablicy, aby pasowały do twoich warunków. W przeciwnym razie po prostu użyj "notacji kropkowej" jako standardu.
Drugi przypadek dotyczy $push
, gdzie ten konkretny operator oznacza „dodawanie” elementów do tablicy. W twoim przypadku chcesz po prostu "zaktualizować", więc prawidłowym operatorem jest tutaj $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Więc pozycyjny $
operator tutaj jest tym, co pasuje do "znalezionego indeksu" z elementu tablicy i zezwala na $set
operatora, aby „zmienić” elementy dopasowane w tej „pozycji”.