MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Meteor Mongo aktualisiert verschachteltes Array

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".