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

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

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

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 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