web-dev-qa-db-ja.com

$ lookupAggregationOperatorでシャーディングを使用するMongoDB

$lookupはMongoDB3.2の新機能です。同じデータベース内のシャーディングされていないコレクションへの左外部結合を実行して、処理のために「結合された」コレクションからドキュメントをフィルタリングします。

$lookupを使用するために、fromコレクションをシャーディングすることはできません。

一方、シャーディングは便利な水平スケーリングアプローチです。

それらを一緒に使用するためのベストプラクティスは何ですか?

24
Map X

引用するドキュメントが示すように、シャードコレクションで$lookupを使用することはできません。したがって、ベストプラクティスの回避策は、別のクエリで自分でルックアップを実行することです。

  1. aggregateクエリを実行します。
  2. Array#map を使用して、クエリ結果から「localField」値を配列にプルします。
  3. {foreignField: {$in: localFieldArray}}のようなクエリを使用して、「from」コレクションに対してfindクエリを実行します。
  4. 結果を必要な形式にマージします。

$lookupの制限により、スケーラビリティのためにそれを必要とするコレクションをシャーディングすることを妨げないでください。ルックアップ機能を自分で実行するだけです。

26
JohnnyHK