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

139
Views
Mongo obtiene valor de 2 colecciones al mismo tiempo

Estoy tratando de obtener datos de 2 colecciones y devolver una matriz con datos combinados de ambas colecciones.

La mejor solución para mí fue:

 const bothValues = await ValueA.aggregate([ { $unionWith: { coll: 'valueB' } }, { $sort: { rank: -1, _id: -1 } }, { $match: { isAvailable: true, }, }, { $skip: skip }, { $limit: 30 }, ]);

que funcionan perfectamente. Pero... $unionWith no se implementó en mi versión de MongoDB (4.0.X), así que no puedo usarlo.

 const bothValues = await ValueA.aggregate( [ { $limit: 1 }, { $lookup: { from: 'valueB', pipeline: [{ $limit: 15 }], as: 'valueB', }, }, { $lookup: { from: 'ValueA', pipeline: [{ $limit: 15 }, { $sort: { rank: -1, _id: -1 } }], as: 'ValueA', }, }, { $project: { Union: { $concatArrays: ['$valueB', '$ValueA'] }, }, }, { $unwind: '$Union' }, { $replaceRoot: { newRoot: '$Union' } }, ], );

pero ahora, tengo 2 problemas:

  • No puedo usar $skip , lo cual es importante, ¿dónde usarlo?
  • ¿Cómo usar $match?

Gracias

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Consulta

  • su consulta realizada con algunos cambios para que funcione como la primera consulta
  • coincidir en ambas canalizaciones, ordenar en ambos, (limit limitN+skipN) (de esta manera nos aseguramos de que siempre tengamos suficientes documentos, incluso si todos se toman de valueA o valueB)
  • Tome 70 clasificados de cada uno, por lo que en todos los sentidos tendremos los 70 necesarios en la clasificación/salto/límite final después de la unión.
  • concat,desenrollar,reemplazar-root como en su consulta
  • ordenar de nuevo (para ordenar la unión ahora), omitir, limitar
  • no importa, siempre tenemos suficientes documentos para omitir
  • esta consulta de ejemplo se realiza para skip=40 y limit=30 , por lo que en las primeras 2 canalizaciones limit=70
 db.ValueA.aggregate([ { "$limit": 1 }, { "$lookup": { "from": "valueB", "pipeline": [ { "$match": { "isAvailable": true } }, { "$sort": { "rank": -1, "_id": -1 } }, { "$limit": 70 } ], "as": "valueB" } }, { "$lookup": { "from": "valueA", "pipeline": [ { "$match": { "isAvailable": true } }, { "$sort": { "rank": -1, "_id": -1 } }, { "$limit": 70 } ], "as": "valueA" } }, { "$project": { "union": { "$concatArrays": [ "$valueA", "$valueB" ] } } }, { "$unwind": { "path": "$union" } }, { "$replaceRoot": { "newRoot": "$union" } }, { "$sort": { "rank": -1, "_id": -1 } }, { "$skip": 40 }, { "$limit": 30 } ])
about 4 years ago · Juan Pablo Isaza 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!