Usar $lookup para crear una vista sobre dos colecciones. Las aplicaciones pueden consultar la vista sin construir ni mantener pipelines complejos.
Ejemplo
Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos 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> } ]