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

181
Vistas
MongoDB agrega nuevos campos nombrados con valor variable

Mi pregunta es, dados pocos documentos como este

 { deliveryDay: "2021-01-14", plate: { name: "pasta", quantity: 1 } } { deliveryDay: "2021-01-16", plate: { name: "pasta", quantity: 3 } } { deliveryDay: "2021-01-16", plate: { name: "pizza", quantity: 2 } }

¿Hay una manera de obtener el resultado deseado a continuación? Traté de tener un campo con nombre personalizado con $addFields como este {"$deliveryDay": "$plate.quantity" } pero me da un error no válido. La agregación no es un problema y estoy dentro del marco de agregación, por lo que necesito hacerlo usando etapas de canalización de agregación.

resultado atendido:

 { "2021-01-14": 1, "2021-01-16": 3, plate: { name: "pasta" } } { "2021-01-14": 0, "2021-01-16": 2, plate: { name: "pizza" } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Entonces la idea es:

  1. Agrupe los documentos por día de deliveryDay y plate.name para obtener la suma de plate.quantity .
  2. Agrupe el resultado anterior nuevamente por name para generar una matriz de formato [{ k: "", v: "" }] .
  3. Concatene { k: "plate", v: { name: "$_id" } } en la matriz anterior.
  4. Ahora convierta la array en un objeto usando $arrayToObject .

Solución en el parque infantil de Mongo . Prueba esto:

 db.testCollection.aggregate([ { $group: { _id: { dDate: "$deliveryDay", name: "$plate.name" }, sumOfQty: { $sum: "$plate.quantity" } } }, { $group: { _id: "$_id.name", array: { $push: { k: "$_id.dDate", v: "$sumOfQty" } } } }, { $addFields: { array: { $concatArrays: ["$array", [{ k: "plate", v: { name: "$_id" } }]] } } }, { $replaceRoot: { newRoot: { $arrayToObject: "$array" } } } ]);

Producción

 /* 1 */ { "2021-01-16" : 2, "plate" : { "name" : "pizza" } }, /* 2 */ { "2021-01-14" : 1, "2021-01-16" : 3, "plate" : { "name" : "pasta" } }
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