Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

221
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!