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

136
Vistas
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 Respuestas
Responde la pregunta

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