ルックアップフィールドを追加する
ルックアップ フィールドを使用すると、同じデータベース内の複数のコレクションのデータを結合するチャートを作成できます。 ルックアップ フィールドは、チャートのメイン データソースのフィールドに対応する値を持つドキュメントを 2 番目のコレクションから取得します。
ルックアップ フィールドは、コレクション間の親と子、プライマリキー、外部キーの関係を活用したり、あるコレクション内のフィールドが別のコレクションのフィールドを参照したりする状況に役立ちます。 ルックアップ フィールドは $lookupを使用して、リモート コレクションから一致するドキュメントを検索します。
新しいルックアップフィールドを作成する
埋め込みオブジェクトではなく、別のコレクションのフィールドと一致するデータを含む、チャートのデータソース内の任意のフィールドからルックアップ フィールドを作成できます。 リモート コレクションは、次の条件を満たす必要があります。
既存の Charts データソース。
ローカル コレクションと同じデータベースの一部。
注意
また、ローカル コレクションをルックアップ フィールド ソースとして使用することもできます。
ルックアップ フィールドを追加するには、既存のフィールドにカーソルを合わせ、フィールド名の右側にある ellipsis (...)をクリックします。 ドロップダウン メニューからLookup fieldを選択します。 次のモーダル ウィンドウが表示されます。
ドロップダウン メニューから目的のコレクションとフィールドを選択します。 リモート フィールドには、ローカル フィールドと一致するデータを含むドキュメントが少なくとも 1 つ含まれている必要があります。そうでない場合、ルックアップ フィールドは空になります。
外部コレクションから一致するすべてのドキュメントを返すか、最初に一致するドキュメントのみを返すオプションがあります。 一致するすべてのドキュメントを返すことは、親と子やプライマリキーの関係など、1 対多の関係に推奨されます。 参照データ コードなどの 1 対 1 または多対 1 の関係には、最初のドキュメントのみを返すことをお勧めします。 一致する最初のドキュメントのみを返す場合は、 Return only first matching documentラジオボタンを確認します。
Charts では新しいフィールドの名前が提案されますが、必要に応じて任意の名前を入力できます。 新しいフィールドを作成するには、 Saveをクリックします。
新しいフィールドにはbinocularsアイコンが表示されます。これは、ルックアップ フィールドであることを示します。
重要
ルックアップ フィールドとして使用するすべてのフィールドが 適切にインデックス付けされていること を確認してください。 大規模なコレクション内のインデックスのないフィールドで検索操作を実行すると、パフォーマンス上の重大な問題やタイムアウトが発生する恐れがあります。
フィールド パネルからルックアップ フィールドを削除するには、ルックアップ フィールドにカーソルを合わせ、フィールド名の右側にある [ ellipsis (...) ] をクリックします。 ドロップダウン メニューからRemove fieldを選択します。
例
次の例では、2 つのデータソースを使用しています。1 つは product_catalog
と呼ばれ、もう 1 つはorders
と呼ばれます。
product_catalog
コレクションには次のドキュメントが含まれます。
{ "_id" : 76234, "item" : "21 inch monitor" } { "_id" : 38921, "item" : "USB C cable" } { "_id" : 21167, "item" : "keyboard" } { "_id" : 90252, "item" : "60 GB external hard drive" }
orders
コレクションには次のドキュメントが含まれます。
{ "_id" : 1, "sku": 38921, "quantity": 50 } { "_id" : 2, "sku": 21167, "quantity": 75 } { "_id" : 3, "sku": 76234, "quantity": 15 } { "_id" : 4, "sku": 21167, "quantity": 20 }
orders
コレクション内のレコードはsku
フィールドを使用してproduct_catalog
コレクション内の_id
フィールドを参照します。
目的は、注文された商品数を示す縦棒チャートを作成することです。 次のグラフでは、データソースとしてorders
を使用しています。 ルックアップ フィールドsku_lookup_product_catalog
はorders.sku
フィールドから作成されます。 product_catalog
リモート データソースとして コレクションを使用し、リモートproduct_catalog._id
フィールドとして コレクションを使用します。
グラフでは、X 軸としてproduct_catalog.item
を使用し、Y 軸としてorders.quantity
を使用します。