MongoDB 速習チュートリアル

$lookup

1. $lookup ステージの概要

このアグリゲーションステージは、同一データベース内の別のコレクションに対して「左外部結合(左外部ジョイン / Left Outer Join)」を実行します。

$lookup を使用する際には、以下の 4 つの必須フィールドを指定する必要があります。

フィールド説明
from同一データベース内の、結合対象となる(ルックアップ先の)コレクションを指定します。
localField入力側のコレクション(プライマリコレクション)にあるフィールドで、結合のキーとなるものを指定します。
foreignField結合先(from で指定した)コレクションにあるフィールドで、結合のキーとなるものを指定します。
as結合されたドキュメントを格納する、新しい配列フィールドの名前を指定します。

2. 実装例:コメントに映画情報を結合する

この例では、「アグリゲーション入門」セクションでロードしたサンプルデータセットの中から、sample_mflix データベースを使用します。

comments(コメント)コレクションのドキュメントに、対応する movies(映画)コレクションの詳細情報を結合してみましょう。

2.1 コード例

db.comments.aggregate([
  {
    // ステージ 1: movies コレクションから映画情報を取得して結合
    $lookup: {
      from: "movies",             // 結合先コレクション
      localField: "movie_id",     // comments コレクション側の結合キー
      foreignField: "_id",        // movies コレクション側の結合キー
      as: "movie_details",        // 結合結果を格納する新しいフィールド名
    },
  },
  {
    // ステージ 2: 結果を 1 件に制限して確認
    $limit: 1
  }
])

2.2 実行結果の解説

このクエリを実行すると、各コメントドキュメントの中に movie_details という名前の配列が新しく作成され、そこに movie_id と一致する _id を持った映画データが格納された状態で返されます。