Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

604
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

0

Esto ayudará, supongo

 Employeehierarchy.findOneAndUpdate( { _id:employeeparent._id }, { $set: { "childrens": employee._id }} )
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda