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

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

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