MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Meteor mongo che aggiorna l'array nidificato

Quindi la prima cosa da dire qui è il $elemMatch non è richiesto nel tuo caso poiché vuoi solo abbinare su una singola proprietà dell'array. Usi quell'operatore quando hai bisogno di "due o più" proprietà dallo stesso elemento dell'array per soddisfare le tue condizioni. Altrimenti usi semplicemente la "notazione del punto" come standard.

Il secondo caso qui è con $push , dove quel particolare operatore intende "aggiungere" elementi all'array. Nel tuo caso vuoi solo "aggiornare", quindi l'operatore corretto qui è $set :

Activity.update(
    { "_id": activityId, "usersActivities.userId": Meteor.userId() },
    {
        "$set": {
            'usersActivities.$.startDate': start,
            'usersActivities.$.endDate': end
        }
    }
)

Quindi il posizionale $ operatore qui è ciò che corrisponde all'"indice trovato" dall'elemento dell'array e consente il $set operatore per "cambiare" gli elementi abbinati in quella "posizione".