Das erste, was hier zu sagen ist, ist also $elemMatch
ist in Ihrem Fall nicht erforderlich, da Sie nur eine einzelne Array-Eigenschaft abgleichen möchten. Sie verwenden diesen Operator, wenn Sie "zwei oder mehr" Eigenschaften aus demselben Array-Element benötigen, um Ihren Bedingungen zu entsprechen. Ansonsten verwenden Sie einfach die "Punktnotation" als Standard.
Der zweite Fall hier ist mit $push
, wobei dieser bestimmte Operator bedeutet, dass Elemente zum Array "hinzugefügt" werden. In Ihrem Fall möchten Sie nur "aktualisieren", also ist der richtige Operator hier $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Also das positionelle $
Operator hier ist, was mit dem "gefundenen Index" aus dem Array-Element übereinstimmt und den $set
zulässt Operator, um die an dieser "Position" gefundenen Elemente zu "ändern".