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

L'aggiornamento di Mongoose 'non può utilizzare la parte (..) per attraversare l'elemento

Prova a utilizzare il posizionale $ operatore nell'aggiornamento che identifica un elemento in un array da aggiornare senza specificare esplicitamente la posizione dell'elemento nell'array, ma questo corrisponderà sempre e solo a un elemento alla volta:

 User.update(
    { 
        "local.email": user,
        "devices.id": { "$ne": deviceID },
        "devices.name": { "$ne": deviceName }
    }, 
    { 
        "$set": { 
            "devices.$.id": deviceID,
            "devices.$.name": deviceName 
        }
    } 
);

Dai documenti , l'operatore posizionale $ funge da segnaposto per il primo elemento che corrisponde al documento della query e il campo dell'array deve apparire come parte del documento della query, quindi il documento della query

"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }

contiene il device array e corrisponderà a quei documenti in cui il device matrice id non è uguale a deviceID e il nome non è lo stesso del nome che stai tentando di aggiornare. Questo corrisponderà anche ai documenti in cui il device l'array è vuoto.