Не можете да използвате и двете $set и $push в същия израз за актуализиране като вложените оператори.
Следва правилният синтаксис за използване на операторите за актуализиране:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
където <оператор1>, <оператор2>код> може да бъде от всеки от списъка с оператори за актуализиране, посочени тук.
За добавяне на нов елемент към масива, еднократно $push оператор ще бъде достатъчен, напр. можете да използвате findByIdAndUpdate метод за актуализиране, за да върнете модифицирания документ като
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
Използване на оригиналния ви update() метод, синтаксисът е
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);
}
);
в който функцията за обратно извикване получава аргументите (err, raw) където
грешкае грешката, ако е възникнала такаванеобработеное пълният отговор от Mongo
Тъй като искате да проверите модифицирания документ, бих ви предложил да използвате findByIdAndUpdate функция от update() методът няма да ви даде модифицирания документ, а само пълния резултат от запис от mongo.
Ако искате да актуализирате поле в документа и да добавите елемент към масив едновременно, тогава можете да направите
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);
}
);
Горното ще актуализира name полето към "foo" и добавете идентификатора на служителя към childrens масив.