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

Mongoose-opdatering 'kan ikke bruge delen (..) til at krydse elementet

Prøv at bruge positionelle $ operatør i opdateringen, som identificerer et element i et array, der skal opdateres uden eksplicit at specificere elementets position i arrayet, men dette vil kun matche ét element ad gangen:

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

Fra dokumenterne , den positionelle $-operator fungerer som en pladsholder for det første element, der matcher forespørgselsdokumentet, og array-feltet skal vises som en del af forespørgselsdokumentet og derfor forespørgselsdokumentet

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

indeholder device array og vil matche de dokumenter, hvor device array id er ikke lig med deviceID og navnet er ikke det samme som det navn, du forsøger at opdatere. Dette vil endda matche dokumenter, hvor device arrayet er tomt.



  1. Kombiner to $or-udsagn

  2. Hvordan jeg kender mit dokuments størrelse inde i MongoDB med rubindriveren

  3. Databasesikkerhed 101:Forståelse af databaseadgangsprivilegier

  4. Filtrering af elementer i Redis