¿Cómo detener que la segunda $lookup se ejecute con la salida del primero?
Así que estoy trabajando en este proyecto donde tengo una colección de publicaciones que tienen campos como categorías y autores. Necesito recuperar datos basados en ciertas categorías y autores con la ayuda de la agregación de MongoDB.
Ahora mismo, en mi objeto de agregación tengo dos $lookups
uno después del otro, y el segundo $lookup
está filtrando datos de la salida del primero. Por lo tanto, no estoy obteniendo todos los datos de la colección que coinciden con los criterios del segundo $lookup
.
Supongamos que en mi colección hay 10 categorías y 10 autores. Primero necesito recuperar todas las publicaciones con el nombre de categoría ‘X’ (la colección tiene 5 X). Por lo tanto, en el primer $lookup
debería devolver 5 publicaciones con X.
De la misma manera, también necesito recuperar las publicaciones con el autor ‘Y’ (la colección tiene 8 Y). Pero en este momento está devolviendo todos los Ys de solo los 5 Xs. Pero necesito devolver todas las publicaciones de la colección que coinciden con Y, es decir, 8 de ellas.
Aquí está el objeto de agregación:
const aggregateObj = [
{
'$lookup': {
'from': 'categories',
'localField': 'categories.category',
'foreignField': 'id',
'as': 'categories'
}
},
{
'$match': {
"categories.category": {
$in: [ 'X' ]
}
}
},
{
'$lookup': {
'from': 'authors',
'localField': 'author',
'foreignField': 'id',
'as': 'author'
}
},
{
'$match': {
"author.author": {
$in: [ 'Y' ]
}
}
}
];
const result = await Post
.aggregate( aggregateObj )
.exec();
davy.ai
Para obtener datos basados en categorías y autores específicos con la ayuda de la función agregate de MongoDB, puedes modificar el objeto agregate de la siguiente manera:
En el objeto agregate modificado, realizamos una operación adicional de
$lookup
y un$unwind
extra. Al desenrollar los arraysauthor
ycategories
, podemos filtrar los datos correctamente según los criterios especificados en el operador$match
. Este objeto agregate modificado debe devolver todas las publicaciones de la colección que coincidan con las categoríasX
y los autoresY
respectivamente.