Quiero actualizar un valor de matriz, pero no estoy seguro del método adecuado para hacerlo, así que probé el siguiente método pero no funcionó para mí.
Mi modelo, El campo de los niños en mi modelo.
childrens: { type: Array, default: '' }mi consulta,
Employeehierarchy.update({ _id: employeeparent._id} ,{ $set: {"$push": { "childrens": employee._id }} }) .exec(function (err, managerparent) {});¿Puede alguien ayudarme? Gracias.
No puede usar tanto $set como $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> pueden ser de cualquiera de la lista de operadores de actualización especificada aquí .
Para agregar un nuevo elemento a la matriz, bastará con un solo operador $push , por ejemplo, puede usar el método de actualización findByIdAndUpdate 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 método original de update() , 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 la función findByIdAndUpdate ya que el método update() 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 campo de name a "foo" y agregará la identificación del empleado a la matriz de childrens .
puede seguir esto
si childrens contiene valores de cadena, entonces el modelo puede ser como:
childrens: [{ type : String }] si childrens contiene valores de ObjectId de otra colección _id y desea completar, entonces el modelo puede ser como:
childrens: [{ type : mongoose.Schema.Types.ObjectId, ref: 'refModelName' }] no es necesario usar $set solo use $push para insertar valor en la matriz de childrens . entonces la consulta puede ser como:
Employeehierarchy.update( { _id: employeeparent._id}, {"$push": { "childrens": employee._id } } ).exec(function (err, managerparent) { // });Esto ayudará, supongo
Employeehierarchy.findOneAndUpdate( { _id:employeeparent._id }, { $set: { "childrens": employee._id }} )