Utiliza $lookup para crear una vista sobre dos colecciones. Las aplicaciones pueden consultar la vista sin necesidad de construir ni mantener pipelines complejos.
Ejemplo
Los ejemplos de esta página utilizan datos del conjunto de datos sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en su implementación autogestionada de MongoDB, consulte Cargar el conjunto de datos de ejemplo. Si realizó alguna modificación en las bases de datos de ejemplo, es posible que deba eliminarlas y volver a crearlas para ejecutar los ejemplos de esta página.
Crea una vista combinada
db.createView( "movieComments", "movies", [ { $match: { year: { $gte: 2014 } } }, { $lookup: { from: "comments", localField: "_id", foreignField: "movie_id", as: "movieComments" } }, { $project: { _id: 0, title: 1, year: 1, numComments: { $size: "$movieComments" } } } ] )
En el ejemplo:
La etapa
$matchfiltra la colección demoviesa documentos publicados a partir de 2014.La etapa
$lookuputiliza el campo_iden la colecciónmoviespara unir documentos en la coleccióncommentsque tengan un campomovie_idcoincidente.Los documentos que coinciden se agregan como un arreglo en el campo
movieComments.La etapa
$projectselecciona un subconjunto de los campos disponibles, incluyendonumComments, que es el recuento de comentarios para cada pelÃcula.
Consulte la vista
Consulta la vista de las cinco pelÃculas con más comentarios:
db.movieComments.aggregate( [ { $group: { _id: "$title", totalComments: { $sum: "$numComments" } } }, { $sort: { totalComments: -1 } }, { $limit: 5 } ] )
[ { _id: '<title>', totalComments: <num> }, { _id: '<title>', totalComments: <num> }, { _id: '<title>', totalComments: <num> }, { _id: '<title>', totalComments: <num> }, { _id: '<title>', totalComments: <num> } ]