No puedes usar ambos $set y $push en la misma expresión de actualización que los operadores anidados.
La sintaxis correcta para usar los operadores de actualización es la siguiente:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
donde <operator1>, <operator2> puede ser de cualquiera de la lista de operadores de actualización especificada aquí.
Para agregar un nuevo elemento a la matriz, un solo $push operador será suficiente, p. puede usar findByIdAndUpdate método de actualización para devolver el 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 su update() original método, la sintaxis es
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);
}
);
en el que la función de devolución de llamada recibe los argumentos (err, raw) donde
erres el error si ocurrió algunorawes la respuesta completa de Mongo
Como desea verificar el documento modificado, le sugiero que use el findByIdAndUpdate función desde el update() El método no le dará el documento modificado, solo el resultado de escritura completo de mongo.
Si desea actualizar un campo en el documento y agregar un elemento a una matriz al mismo tiempo, puede hacerlo
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);
}
);
Lo anterior actualizará el name campo a "foo" y agregue la identificación del empleado a los childrens matriz.