$graphLookup (グラフ検索)

最終更新:2026-10-09

$graphLookup (グラフ検索)

$graphLookup は、コレクション上で再帰検索を行い、グラフの走査をエミュレートします: connectFromField の値から開始して、maxDepth に達するか一致がなくなるまで connectToField を再帰的に一致させ、結果を as に格納します。組織図、カテゴリツリー、ホップ数のカウントに最適です。$lookup と違い、任意の深さを再帰できます。

カテゴリ高度と診断
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $graphLookup: { from: "<collection>", startWith: <expression>, connectFromField: "<field>", connectToField: "<field>", as: "<outputField>", maxDepth: <number>, depthField: "<depthField>" } }

⚙️ パラメータ

from再帰検索の対象コレクション。
startWith再帰を開始する値の式。
connectFromField現在のドキュメントでマッチする値を持つフィールド。
connectToField対象コレクションでマッチされるフィールド。
as再帰結果を受け取るフィールド名。
maxDepth最大再帰深度。省略した場合は無制限。

戻り値:各ドキュメントに再帰結果配列を付加したもの

▶ 例

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

// $graphLookup: 従業員ごとの報告チェーンを構築
db.employees.aggregate([
  { $graphLookup: {
    from: 'employees',
    startWith: '$reportsTo',
    connectFromField: 'reportsTo',
    connectToField: 'name',
    as: 'chain'
  } }
])

出力:

// 各従業員ドキュメントにマネージャーの配列 chain が付く

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q$graphLookup と $lookup の違いは?
A$lookup は 1 レベルだけ結合します。$graphLookup は複数レベルにわたって再帰します。
Q再帰は無限ループになりますか?
A一致がなくなるまで再帰し、maxDepth で上限を設定できます。
Q結果にドキュメント自身は含まれますか?
Aいいえ。startWith はシードで、結果はそれに一致した他のドキュメントです。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%