Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

608
Vistas
Cómo actualizar un valor de matriz en Mongoose

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.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

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ó alguno
  • raw 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 .

over 4 years ago · Santiago Trujillo Denunciar

0

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) { // });
over 4 years ago · Santiago Trujillo Denunciar

0

Esto ayudará, supongo

 Employeehierarchy.findOneAndUpdate( { _id:employeeparent._id }, { $set: { "childrens": employee._id }} )
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda