Você não pode usar
$set
e $push
na mesma expressão de atualização que os operadores aninhados. A sintaxe correta para usar os operadores de atualização é a seguinte:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
onde
<operator1>, <operator2>
pode ser de qualquer uma das listas de operadores de atualização especificadas aqui. Para adicionar um novo elemento ao array, um único
$push
operador será suficiente e. você pode usar o findByIdAndUpdate
método de atualização para retornar o documento modificado como Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
Usando seu
update()
original método, a sintaxe é 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);
}
);
em que a função de retorno de chamada recebe os argumentos
(err, raw)
Onde err
é o erro se algum ocorreuraw
é a resposta completa do Mongo
Como você deseja verificar o documento modificado, sugiro que use o
findByIdAndUpdate
função desde o update()
O método não fornecerá o documento modificado, apenas o resultado completo da gravação do mongo. Se você deseja atualizar um campo no documento e adicionar um elemento a uma matriz ao mesmo tempo, pode fazer
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);
}
);
O acima irá atualizar o
name
campo para "foo" e adicione o ID do funcionário ao childrens
variedade.