Nemůžete použít obě $set
a $push
ve stejném aktualizačním výrazu jako vnořené operátory.
Správná syntaxe pro použití operátorů aktualizace je následující:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
kde
Pro přidání nového prvku do pole stačí $push
operátor bude stačit např. můžete použít findByIdAndUpdate
aktualizovat metodu vrátit upravený dokument jako
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
Pomocí původního update()
syntaxe je
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);
}
);
ve kterém funkce zpětného volání přijímá argumenty (err, raw)
kde
chyba
je chyba, pokud k nějaké došloraw
je úplná odpověď od Mongo
Protože chcete zkontrolovat upravený dokument, doporučuji vám použít findByIdAndUpdate
funkce od update()
metoda vám neposkytne upravený dokument, pouze úplný výsledek zápisu z mongo.
Pokud chcete aktualizovat pole v dokumentu a zároveň přidat prvek do pole, můžete to udělat
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);
}
);
Výše uvedené aktualizuje název
pole na "foo" a přidejte ID zaměstnance do childrens
pole.