Então, a primeira coisa a dizer aqui é o
$elemMatch
não é necessário no seu caso, pois você deseja corresponder apenas a uma única propriedade de matriz. Você usa esse operador quando precisa de "duas ou mais" propriedades do mesmo elemento de matriz para corresponder às suas condições. Caso contrário, você apenas usa "notação de ponto" como padrão. O segundo caso aqui é com
$push
, onde esse operador específico significa "adicionar" elementos à matriz. No seu caso, você só quer "atualizar" para que o operador correto aqui seja $set
:Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Portanto, o
$
posicional operador aqui é o que corresponde ao "índice encontrado" do elemento array e permite o $set
operador para "alterar" os elementos correspondentes nessa "posição".