MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Meteor mongo atualizando array aninhado


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