/ / /
Use $lookup para criar uma visualização de duas coleções. Os aplicativos podem consultar a visualização sem construir ou manter pipelines complexos.
Exemplo
..include:: /includes/sample-data-usage.rst
Criar uma visualização conjunta
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" } } } ] )
No exemplo:
O estágio filtra
$matchamoviescoleção para documentos lançados 2014 a partir de.O estágio usa
$lookupo_idcampo namoviescollection para unir documentos nacommentscollection que têm ummovie_idcampo correspondente.Os documentos correspondentes são adicionados como uma array no campo
movieComments.O estágio seleciona um subconjunto dos campos
$projectdisponíveis,numCommentsincluindo, que é a contagem de comentários para cada filme.
Consultar a visualização
Consulte a visualização dos cinco filmes com mais comentários:
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> } ]