První věc, kterou je zde třeba říci, je $elemMatch
není ve vašem případě vyžadováno, protože chcete porovnat pouze jednu vlastnost pole. Tento operátor použijete, když potřebujete "dvě nebo více" vlastností ze stejného prvku pole, aby odpovídaly vašim podmínkám. V opačném případě jednoduše použijete „tečkovou notaci“ jako standard.
Druhý případ je zde s $push
, kde tento konkrétní operátor znamená "přidat" prvky do pole. Ve vašem případě chcete pouze "aktualizovat", takže správný operátor je zde $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Tedy poziční $
Zde je operátor to, co se shoduje s "nalezeným indexem" z prvku pole a umožňuje $set
operátora pro "změnu" prvků odpovídajících této "pozici".