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

Atualização do mangusto 'não pode usar a parte (..) para atravessar o elemento


Tente usar o $ posicional operador na atualização que identifica um elemento em uma matriz para atualizar sem especificar explicitamente a posição do elemento na matriz, mas isso só corresponderá a um elemento por vez:
 User.update(
    { 
        "local.email": user,
        "devices.id": { "$ne": deviceID },
        "devices.name": { "$ne": deviceName }
    }, 
    { 
        "$set": { 
            "devices.$.id": deviceID,
            "devices.$.name": deviceName 
        }
    } 
);

Dos docs , o operador posicional $ atua como um espaço reservado para o primeiro elemento que corresponde ao documento de consulta e o campo de matriz deve aparecer como parte do documento de consulta, portanto, o documento de consulta
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }

contém o device array e corresponderá aos documentos em que o device matriz id não é igual a deviceID e o nome não é o mesmo que você está tentando atualizar. Isso corresponderá até mesmo a documentos em que o device matriz está vazia.