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

156
Vistas
Mongoose: cambio de nombre de la clave del objeto dentro de la matriz

tengo este esquema

 { _id: "123456", id: "123", inventory: [ { id: "foo", count: 0 }, { id: "bar", count: 3 } ] }

Quería que todas las claves de "recuento" en la matriz de inventario fueran "precio", que se verá así al final:

 { _id: "123456", id: "123", inventory: [ { id: "foo", price: 0 }, { id: "bar", price: 3 } ] }

Y he probado esto

 Model.updateOne({ id: "123" }, { $unset: { inventory: [{ count: 1 }] } } )

Pero parece estar eliminando el campo "inventario" en sí

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Lo primero aquí es tratar de usar $rename pero cómo explican los documentos:

$rename no funciona si estos campos están en elementos de matriz.

Entonces es necesario buscar otro método. Entonces puede usar esta actualización con una consulta de agregación:

Esta consulta usa principalmente $map , $arrayToObject y $objectToArray . El truco aquí es:

  • Cree un nuevo campo llamado inventory (sobrescriba uno existente)
  • Itere sobre cada valor de la matriz con $map , y luego para cada objeto en la matriz use $objectToArray para crear una matriz y también itere sobre esa segunda matriz usando nuevamente $map .
  • En esta segunda iteración, cree los campos k y v . El campo v será el mismo (no desea cambiar el valor, solo la clave). Y para el campo k , debe cambiar solo el que coincida con su condición, es decir, solo cambie de count a price . Si no se cumple esta condición, la clave permanecerá.
 db.collection.update({}, [ { $set: { inventory: { $map: { input: "$inventory", in: { $arrayToObject: { $map: { input: {$objectToArray: "$$this"}, in: { k: { $cond: [ { $eq: ["$$this.k","count"] }, "price", "$$this.k" ] }, v: "$$this.v" } } } } } } } } ])

Ejemplo aquí

about 4 years ago · Juan Pablo Isaza 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