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

351
Vistas
Obtener todas las claves distintas de un objeto anidado

Tengo los siguientes datos en mi colección:

 [ { _id: "2313123123", metadata: { path: "...", value: "...", name: "..." } }, { _id: "2313123123", metadata: { path: "...", name: "...", origin: "...", } }, { _id: "2313123123", metadata: { path: "...", source: "..." } }, ]

Quiero recuperar todos los nombres clave distintos de los metadata de campo de mis documentos. Quiero recuperar ["path", "value", "name", "origin", "source"] .

¿Cómo puedo consultar esto? ¿Es esto posible con el método distinct o necesito usar aggregate ?

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

0

Tendrá que usar un agregado para esto, lamentablemente debido a la naturaleza de sus necesidades, esta será una canalización muy "costosa" de ejecutar. No hay forma de evitar iterar sobre toda la colección y agregar las claves únicas a la matriz.

Vamos a usar $objectToArray para convertir metadata en una matriz, luego $unwind y finalmente usando $group podemos guardar todos los valores únicos.

 db.collection.aggregate([ { $project: { keys: { $map: { input: { "$objectToArray": "$metadata" }, in: "$$this.k" } } } }, { $unwind: "$keys" }, { $group: { _id: null, keys: { "$addToSet": "$keys" } } } ])

Parque infantil Mongo

over 4 years ago · Santiago Trujillo Denunciar

0

db.collection.aggregate([ { $addFields: { metadata: { $objectToArray: "$metadata" } } }, { $unwind: "$metadata" }, { $group: { _id: "distinct", dist: { $addToSet: "$metadata.k" } } } ])

explicado:

  1. Convierta el objeto de metadatos en una matriz de metadatos que tenga las claves como valores en la clave k.
  2. Desenrolle la matriz de metadatos de claves k y valores v
  3. group con addToSet para extraer solo los distintos valores k en el resultado final.

patio de recreo

Útil javascript en línea de la opción mongo shell:

 db.collection.find({},{metadata:1,_id:0}).forEach( function(doc) { for (key in doc.metadata) s.push(key); } );uni = Array.from(new Set(s));printjson(uni); ["path","name","origin","source","value"]
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