sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man uppdaterar ett arrayvärde i Mongoose

Du kan inte använda båda $set och $push i samma uppdateringsuttryck som kapslade operatorer.

Den korrekta syntaxen för att använda uppdateringsoperatorerna följer:

{
   <operator1>: { <field1>: <value1>, ... },
   <operator2>: { <field2>: <value2>, ... },
   ...
}

där , kan komma från någon av listan över uppdateringsoperatörer som anges här.

För att lägga till ett nytt element till arrayen, en enda $push operatör kommer att räcka t.ex. du kan använda findByIdAndUpdate uppdateringsmetod för att returnera det ändrade dokumentet som

Employeehierarchy.findByIdAndUpdate(employeeparent._id,
    { "$push": { "childrens": employee._id } },
    { "new": true, "upsert": true },
    function (err, managerparent) {
        if (err) throw err;
        console.log(managerparent);
    }
);

Använd din ursprungliga update() metod är syntaxen

Employeehierarchy.update(
   { "_id": employeeparent._id},
   { "$push": { "childrens": employee._id } },
   function (err, raw) {
       if (err) return handleError(err);
       console.log('The raw response from Mongo was ', raw);
   }
);

där callback-funktionen tar emot argumenten (err, raw) var

  • fel är felet om något inträffade
  • är hela svaret från Mongo

Eftersom du vill kontrollera det ändrade dokumentet föreslår jag att du använder findByIdAndUpdate funktion sedan update() Metoden ger dig inte det modifierade dokumentet, bara det fullständiga skrivresultatet från mongo.

Om du vill uppdatera ett fält i dokumentet och lägga till ett element till en array samtidigt kan du göra

Employeehierarchy.findByIdAndUpdate(employeeparent._id,
    { 
        "$set": { "name": "foo" },
        "$push": { "childrens": employee._id } 
    } 
    { "new": true, "upsert": true },
    function (err, managerparent) {
        if (err) throw err;
        console.log(managerparent);
    }
);

Ovanstående uppdaterar namnet fältet till "foo" och lägg till medarbetar-id:t till childrens array.



  1. Mongoose, hitta, returnera specifika egenskaper

  2. Ta bort en nyckel/värde från befintlig MongoDB-post

  3. MongoDB via Mongoose JS - Vad är findByID?

  4. Mongoose find(), hur får man tillgång till resultatdokumenten?