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
err
es el error si ocurrió algunoraw
es 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.