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
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äffaderåä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.