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.