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
Os exemplos nesta página usam dados do conjunto de dados de amostrasample_mflix . Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB, consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
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
$matchfiltra a coleçãomoviespara documentos lançados a partir de 2014.O estágio
$lookupusa o campo_idna coleçãomoviespara unir documentos na coleçãocommentsque tenham camposmovie_idcorrespondentes.Os documentos correspondentes são adicionados como uma array no campo
movieComments.O estágio
$projectseleciona um subconjunto dos campos disponíveis, incluindonumComments, que é a contagem de comentários para cada filme.
Consultar a visualização
Query a visualização para os 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> } ]