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łąd
to błąd, jeśli wystąpiłsurowe
to 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.