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

232
Vistas
¿Cómo fusionar múltiples campos en una sola matriz en una agregación?

Tengo datos que tienen claves principales de usuario en "user.pk" y "usertags.user.pk" .

 [ { _id: ObjectId("62015250cb18d3cadb32c38e"), user: { pk: '7485070525' }, usertags: [ { user: { pk: '334777488' } } ] }, { _id: ObjectId("62015250cb18d3cadb32c38f"), user: { pk: '334777488' }, usertags: [ { user: { pk: '7485070525' } }, { user: { pk: '271738610' } }, { user: { pk: '31961021' } } ] } ]

Estoy buscando agregar todos estos datos en una sola lista de todas las claves principales de usuario distintas, por lo que el resultado de los datos anteriores sería algo así como { _id: null, user_pks: [7485070525, 334777488, 271738610, 31961021] }

Intenté usar la agregación de $group , pero no puedo descifrar cómo fusionar "user.pk" y "usertags.user.pk" . Alguien me puede ayudar con eso?

Editar: esto es lo más cercano que he obtenido, lo que coloca a los usuarios y las etiquetas de usuario en listas separadas.

 db.collection.aggregate([ { $unwind: "$usertags" }, { $group: { _id: null, users: { $push: "$user.pk" }, usertags: {$push: "$usertags.user.pk" } } }, ])
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puedes hacerlo:

pruébalo aquí parque infantil mongodb

 db.collection.aggregate([ { $group: { _id: null, user_pk: { $push: "$user.pk" }, user_sub_pk: { $push: "$usertags" } }, }, // flattern array in user_sub_pk { $set: { user_sub_pk: { $reduce: { input: "$user_sub_pk", initialValue: [], in: { $concatArrays: [ "$$value", "$$this" ], }, }, }, }, }, { $project: { user_pks: { $concatArrays: [ "$user_pk", "$user_sub_pk.user.pk" ], }, }, // remove duplicate items { "$project": { "user_pks": { "$setUnion": [ "$user_pks", [] ] } } } } ])

actualización: refactorizado por @zrbecker

 db.collection.aggregate([ { $group: { _id: null, users: { $push: "$user.pk" }, usertags: { $push: "$usertags.user.pk" } } }, { $project: { users: { $setUnion: [ "$users", { $reduce: { input: "$usertags", initialValue: [], in: { $concatArrays: [ "$$value", "$$this" ] } } } ] } } } ])
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