$lookup
はMongoDB 3.2で新しく追加されました。同じデータベース内の非共有コレクションへの左外部結合を実行して、処理のために「結合」コレクションから文書をフィルタリングします。
$lookup
を使用するには、from
コレクションをシャードできません。
一方、シャーディングは、有効な水平スケーリング手法です。
一緒に使用するのがベストプラクティスですか?
$lookup
はMongoDB 3.2で新しく追加されました。同じデータベース内の非共有コレクションへの左外部結合を実行して、処理のために「結合」コレクションから文書をフィルタリングします。
$lookup
を使用するには、from
コレクションをシャードできません。
一方、シャーディングは、有効な水平スケーリング手法です。
一緒に使用するのがベストプラクティスですか?
あなたが引用したドキュメントに示すように、$lookup
はシャードされたコレクションに使用できません。だからベストプラクティスの回避策は、別々のクエリで自分自身でルックアップを実行することです。
aggregate
クエリを実行します。Array#map
を使用します。{foreignField: {$in: localFieldArray}}
find
クエリを実行します。スケーラビリティのためにコレクションをシャーディングしないように制限しないでください。ちょうどルックアップ機能を自分で実行してください。
したがって、 '$ lookup'は現在かなり制限されていますか? –
私はそれほど遠くに行きません。参照されたデータを非共有コレクションからサーバー側に引き出す機能はまだまだ有効ですが、これはまだ強力なツールです。しかし、ええ、シャードコレクションからデータを引き出すことができないことは重要な制限です。 – JohnnyHK
$ルックアップ段階では、データベースのプライマリシャード上で実行する必要があります。 "from"コレクションも断片化されていないので、同じサーバー上にあり、結合はローカルで実行できます。異なるマシン間での結合を避ける必要があります。これはNoSQLです;-)良い解決策はないと思います。アプリケーションの結果を繰り返し処理したいのですか、または保存しますか?最初のケースでは、すべてのドキュメントのループで検索操作を行う必要があるかもしれません。 2番目のケースでは、MapReduceを使用することができます:http://tebros.com/2011/07/using-mongodb-mapreduce-to-join-2-collections/ – yoooshi