Nie możesz używać obu opcji $set i $push w tym samym wyrażeniu aktualizacji, co operatory zagnieżdżone.
Poprawna składnia użycia operatorów aktualizacji jest następująca:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
gdzie
Aby dodać nowy element do tablicy, pojedynczy $push operator wystarczy m.in. możesz użyć findByIdAndUpdate metoda aktualizacji, aby zwrócić zmodyfikowany dokument jako
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
Korzystanie z oryginalnej update() metoda, składnia to
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);
}
);
w którym funkcja zwrotna otrzymuje argumenty (err, raw) gdzie
błądto błąd, jeśli wystąpiłsuroweto pełna odpowiedź Mongo
Ponieważ chcesz sprawdzić zmodyfikowany dokument, sugeruję użycie findByIdAndUpdate funkcja od update() Metoda nie da ci zmodyfikowanego dokumentu, tylko pełny wynik zapisu z mongo.
Jeśli chcesz zaktualizować pole w dokumencie i jednocześnie dodać element do tablicy, możesz to zrobić
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);
}
);
Powyższe zaktualizuje nazwę pole na "foo" i dodaj identyfikator pracownika do dzieci tablica.