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

213
Visualizações
¿Cómo hacer coincidir en el nivel de objeto en MongoDB?

Documentos de entrada

 "data": { "abc": { "Id": "100" }, "xyz": { "Id": "123" } }

Explicación : quiero hacer la $match en data.{i} i is parameter si le doy a "abc" as a parameter obtengo el siguiente resultado, quiero pasar los múltiples parámetros a i "abc", "xyz".. ¿Cómo puedo hacer eso para hacer que $ coincida con la clave del objeto usando el parámetro?

Salida esperada :

 "data": { "abc": { "Id": "100" }, }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

  • Verifique que la clave exista o no use $exists
  • proyecta esa llave,
 let i = "abc"; Schema.find( { ["data."+i]: { $exists: true } }, { ["data."+i]: 1 } )

Patio de recreo


Segunda opción si tiene una lista de claves en una matriz,

  • mapa a través de preparar una consulta para $or condición, y preparar parte del proyecto
 let i = ["abc", "xyz"]; let query = [], project = {}; i.map(k => { query.push({ ["data."+k]: { $exists: true } }); project["data."+k] = 1; }); Schema.find({ $or: query }, project);

Patio de recreo


Tercera opción utilizando operadores de proyecto a partir de MongoDb v4.4, con un enfoque más dinámico,

  • $objectToArray convertir objeto a matriz
  • $filter para filtrar por encima de la matriz convertida y obtener elementos coincidentes
  • $arrayToObject convierte la matriz de nuevo en objeto
 let i = "abc"; Schema.find( { ["data."+i]: { $exists: true } }, { data: { $arrayToObject: { $filter: { input: { $objectToArray: "$data" }, cond: { $eq: ["$$this.k", i] } } } } } )

Patio de recreo

over 4 years ago · Santiago Trujillo Relatório

0

Prueba esto:

 let keys = ["abc"]; db.collectionName.aggregate([ { $project: { "filteredData": { $filter: { input: { $objectToArray: "$data" }, as: "item", cond: { $in: ["$$item.k", keys] } } } } }, { $project: { data: { $arrayToObject: "$filteredData" } } } ]);

Salida: cuando keys = ["abc"];

 { "_id" : ObjectId("60395e36e0c7d52970d3fa21"), "data" : { "abc" : { "Id" : "100" } } }

Salida: cuando keys = ["abc", "xyz"];

 { "_id" : ObjectId("60395e36e0c7d52970d3fa21"), "data" : { "abc" : { "Id" : "100" }, "xyz" : { "Id" : "123" } } }
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