Docs Menu
Docs Home
/ /
/ / /

ビューを使用して 2 つのコレクションを結合

2 つのコレクションのビューを作成するには、$lookup を使用します。アプリケーションは、複雑なパイプラインを構築または維持することなく、ビューに対してクエリを実行できます。

このページの例では、sample_mflixサンプルデータセットのデータを使用します。このデータセットを自己管理型MongoDB配置にロードする方法の詳細については、サンプルデータセットをロードするを参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。

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" }
}
}
] )

この例では、次のことが行われます。

  • $match ステージは、2014 以降にリリースされたドキュメントに対して movies コレクションをフィルターします。

  • $lookup ステージでは、movies コレクションの _id フィールドを使用して、一致する movie_id フィールドを持つ comments コレクション内のドキュメントを結合します。

  • 一致するドキュメントは、movieComments フィールドに配列として追加されます。

  • $project ステージでは、各映画のコメント数である numComments を含む、使用可能なフィールドのサブセットを選択します。

最もコメントの多い 5 本の映画のビューをクエリします。

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> }
]

戻る

作成とクエリ

項目一覧