Je kunt niet beide gebruiken $set
en $push
in dezelfde update-expressie als geneste operators.
De juiste syntaxis voor het gebruik van de update-operators volgt:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
waar <operator1>, <operator2>
kan afkomstig zijn uit een van de hier gespecificeerde lijst met update-operators.
Voor het toevoegen van een nieuw element aan de array, een enkele $push
operator zal volstaan, b.v. u kunt de findByIdAndUpdate
. gebruiken update methode om het gewijzigde document terug te geven als
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
Je originele update()
. gebruiken methode, de syntaxis is
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);
}
);
waarin de callback-functie de argumenten (err, raw)
. ontvangt waar
err
is de fout als er een is opgetredenraw
is het volledige antwoord van Mongo
Aangezien u het gewijzigde document wilt controleren, raad ik u aan de findByIdAndUpdate
te gebruiken functie sinds de update()
methode geeft u niet het gewijzigde document, alleen het volledige schrijfresultaat van mongo.
Als u een veld in het document wilt bijwerken en tegelijkertijd een element aan een array wilt toevoegen, kunt u dat doen
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);
}
);
Het bovenstaande zal de name
updaten veld naar "foo" en voeg de werknemer-ID toe aan de childrens
array.