Tengo esta consulta que lleva al parámetro $in diferentes arreglos. Uno es openBehaviourIds , el segundo es closeBehaviours . Me gustaría evitar el código duplicado y hacer una consulta con agregación para obtener resultados como {openBehaviours: [{}, {}...], closeBehaviours: [{},{},{}...]} en lugar de usar :
Los ID de comportamiento abiertos y cerrados son matrices de cadenas.
Consulta completa para obtener ambos comportamientos a continuación (casi lo mismo):
const openBehaviours = await behavioursCollection.aggregate([ { $match: { 'behaviourId': { $in: openBehaviourIds } } }, { $lookup: { from: 'colors', localField: 'domainId', foreignField: 'domainId', as: 'color' } }, { $unwind: '$color' } ], { session }).toArray() const closeBehaviours = await behavioursCollection.aggregate([ { $match: { 'behaviourId': { $in: closeBehaviours } } }, { $lookup: { from: 'colors', localField: 'domainId', foreignField: 'domainId', as: 'color' } }, { $unwind: '$color' } ], { session }).toArray()¿Cómo podría combinar esto con una consulta para que quede muy claro? Gracias por la ayuda
puede usar el operador $facet para lograrlo.
behavioursCollection.aggregate([ {$facet:{ "openBehaviours":[ { $match: { 'behaviourId': { $in: openBehaviourIds } } }, { $lookup: { from: 'colors', localField: 'domainId', foreignField: 'domainId', as: 'color' } }, { $unwind: '$color' } ], "closeBehaviours":[ { $match: { 'behaviourId': { $in: closeBehaviours } } }, { $lookup: { from: 'colors', localField: 'domainId', foreignField: 'domainId', as: 'color' } }, { $unwind: '$color' } ] }}]);