OK、まず最初に。これがRDBMSであるかのようにデータを構造化しました。逃げ出し、「結合テーブル」を作成したこともあります。あたかもそのようなものがMongoで役立つかのようです。
あなたの質問に対する簡単な答えは、与えられた「ブックマーク」をロードするために「最初に」を再定義する必要があるということです。$in句を使用した「サーバー側」または大きなforループを使用した「クライアント側」のいずれか。
したがって、データに関する2つの大きな質問:
- ブックマークが完全に全米リアルター協会加入者に属している場合、なぜそれらは独自のコレクションに含まれているのですか?
- 全米リアルター協会加入者が家と財産をブックマークできるのなら、なぜこれらは異なるコレクションにあるのですか?これは不必要な合併症ではありませんか?ブックマークにRealtor.firstのようなものが必要な場合は、なぜそれらを別のコレクションに入れるのですか?
Realtorsコレクションは、おそらく次のようなアイテムで構成されている必要があります。
{"name":"John", "bookmarks": [
{"h":"House1","notes":[{"Nice location","High Ask"}] },
{"p":"PropertyABC","notes":[{"Haunted"}] }
] }
家のIDと物件のIDの「h」と「p」をどのように区別したかに注意してください。あなたが私の次の提案をとるなら、あなたはそれさえ必要としないでしょう。
これをさらに一歩進めて、「場所」など、同じコレクションに家とプロパティが必要になる場合があります。「場所」コレクションでは、すべての家とプロパティを詰め込み、「type」:「house」または「type」:「property」でマークします。次に、「タイプ」フィールドにインデックスを付けます。
なんで?「最初の」メソッドを作成すると、クエリが非常に簡単になります。「ブックマーク」をループして、「Locations」コレクションから適切なキー(「House1」、「PropertyABC」)を取得するだけです。ページングは簡単です。10個のアイテムをクエリしてから戻ります。
あるレベルでは、それはちょっと足りないように思えます。 "データを取得するためにforループを作成するのはなぜですか?15年前にそれをやめようとしました! "しかし、Mongoは「ドキュメント指向」のストアであるため、個々のドキュメントの読み込み。大量のドキュメントを読み込もうとしているので、この小さなフープを飛び越えなければなりません。
幸いなことに、それはすべて悪いわけではありません。Mongoは、個々のドキュメントの読み込みが非常に高速です。一度に10個のアイテムをフェッチするクエリを実行すると、それでも非常に高速になります。