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:
$skip , lo cual es importante, ¿dónde usarlo?Gracias
Consulta
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 } ])