$lookup (コレクション結合)

最終更新:2026-10-09

$lookup (コレクション結合)

$lookup は、現在のコレクションと別のコレクションの間で左外部結合を行い、一致したドキュメントを配列として各結果に付加します。SQL の LEFT JOIN に相当し、複数クエリを投げずにコレクション間のデータを組み合わせられます。なお等値マッチのみに対応し、範囲や条件付きの結合はできません。

カテゴリコアステージ
MongoDB バージョン3.2+
例の言語mongosh(シェル)

📝 構文

{ $lookup: { from: <collection>, localField: <local-field>, foreignField: <foreign-field>, as: <output-array> } }

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $lookup: 注文と顧客を結合
db.orders.aggregate([
  { $lookup: {
      from: "customers",
      localField: "cust_id",
      foreignField: "_id",
      as: "customer"
  } }
])

出力:

{ "_id": 1, "cust_id": "A123", "customer": [{ "_id": "A123", "name": "Alice" }] }

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Q$lookup はデータベースレベルの JOIN を置き換えられますか?
A同様の結果を得られますが、$lookup はクエリ時にデータを結合します。等値マッチとパイプライン内の単純な比較はインデックスを使えますが、結合最適化は SQL データベースほど包括的ではないため、大規模データでは性能を評価してください。
Q$lookup のパフォーマンスを最適化するには?
A結合先コレクションの外部キーにインデックスを作成します。また、パイプラインの先頭で $match を使い、結合前に主コレクションを小さくしておくのが効果的です。
Q$lookup は複数キーの結合に対応していますか?
Aはい。3.6 以降、$expr を使う $lookup のパイプライン形式で、単一キーの等値マッチを超えた複数フィールドの結合やサブクエリが可能です。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%