3

include-RavenDB の機能を知っています。データベースへの 1 回のラウンドトリップで、参照されているドキュメントをすぐに取得できます。しかし、私の問題は次のとおりです。最初に取得したドキュメントには、「他の」ドキュメントへの参照が含まれていません。ただし、「他の」ドキュメントには現在のドキュメントへの参照があります。

世界中にサイトを持つセットアップを想像してみてください。それぞれsiteがさまざまなアラームをトリガーする可能性があります。それぞれにviaalarmへの参照があります。sitesiteId

ここで、すべてのアラームを含むすべてのサイトのリストを取得したいと思います。しかし、これは RavenDB では不可能ですか? -Documentでは、参照されるドキュメントへの ID (または ID の配列) を保持するinclude「パス」のみを受け入れるためです。site

これは、インクルードオーダーlineItemsサイトalarmIds内の配列を提供することで解決できます。このサイトは何年にもわたって実行され、0 から 100 万の間のアラームを収集します。これは私には悪い考えのようです。site'-document and referencing this array in . But in contrast to a lot of examples featuring stuff like an withwhere the order is a self contained thing, my

もちろん、逆の方法でもかまいません。include経由ですべてのアラームとサイトを照会しますsitesId。しかし、これはアラームがゼロのサイトを返しません。

これは私の側の単なる設計ミスですか?私は何かを誤解するには?それとも、これを1つのクエリで実行して「n + 1クエリ」を防ぐことはできませんか?

4

2 に答える 2

2

Alarms言及したように、all を照会することを選択した場合は、サイトごとにグループ化される Alarms コレクションにMap-Reduce インデックス
を作成できます。次に、このMap-Reduce インデックスを クエリして、サイトごとに、それが持っているか持っていないアラームの数を知ることができます...

https://demo.ravendb.net/demos/csharp/static-indexes/map-reduce-index

于 2021-10-21T17:15:29.220 に答える