Nie można używać zarówno $set
i $push
w tym samym wyrażeniu Update jako zagnieżdżonych operatorów.
Poprawna składnia pomocą update operators następująco:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
gdzie <operator1>, <operator2>
może być z dowolnego z listy operatorów aktualizacyjne określone here.
Aby dodać nowy element do tablicy, wystarczy jeden operator, na przykład $push
. można użyć metody findByIdAndUpdate
aktualizacji do powrotu zmodyfikowanego dokumentu jako
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
Używanie oryginalnego update()
metody, składnia jest
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órych funkcja callback odbiera argumenty (err, raw)
gdzie
err
jest błąd jeśli wystąpił
raw
to pełna odpowiedź z Mongo
Skoro chcesz sprawdzić zmodyfikowany dokument, polecam użyć funkcji findByIdAndUpdate
od sposobu update()
nie dostarczy ci zmodyfikowanego dokumentu, tylko pełny wynik zapisu od mongo.
Jeśli chcesz zaktualizować pola w dokumencie i dodać element do tablicy w tym samym czasie to można 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ższy zaktualizuje pola name
do „foo” i dodaj identyfikator pracownika do tablicy childrens
.
Jeśli mogę przetestować Print Manager console.log (managerparent + 'kk') otrzymuję błąd jak uncaughtException: managerparent nie jest zdefiniowana – MMR
Thsnks chridam to wrkd. – MMR
nadal mam jeszcze jedno pytanie dla ciebie :), jeśli wszystko w porządku. – MMR