MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So aktualisieren Sie einen Array-Wert in Mongoose

Sie können nicht beide $set verwenden und $push im selben Aktualisierungsausdruck wie verschachtelte Operatoren.

Die korrekte Syntax für die Verwendung der Aktualisierungsoperatoren lautet:

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

wobei <operator1>, <operator2> kann aus einer der hier angegebenen Update-Operatoren stammen.

Um ein neues Element zum Array hinzuzufügen, ein einzelner $push Operator genügt z.B. Sie können findByIdAndUpdate verwenden update-Methode, um das geänderte Dokument als

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

Verwenden Sie Ihr ursprüngliches update() Methode, die Syntax ist

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);
   }
);

in dem die Callback-Funktion die Argumente (err, raw) erhält wo

  • err ist der Fehler, falls einer aufgetreten ist
  • raw ist die vollständige Antwort von Mongo

Da Sie das geänderte Dokument überprüfen möchten, würde ich vorschlagen, dass Sie findByIdAndUpdate verwenden Funktion seit dem update() -Methode gibt Ihnen nicht das geänderte Dokument, sondern nur das vollständige Schreibergebnis von mongo.

Wenn Sie ein Feld im Dokument aktualisieren und gleichzeitig ein Element zu einem Array hinzufügen möchten, können Sie dies tun

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);
    }
);

Das obige aktualisiert den name Feld zu "foo" und fügen Sie die Mitarbeiter-ID zu childrens hinzu Array.