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
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 istraw
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.