Не можете да използвате и двете $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
масив.