RavenDB には 2 つのコレクションがあります。1 つは製品用、もう 1 つは各製品の価格戦略用です。各価格戦略は、製品 ID によって単一の製品を参照します。たとえば、製品は次のようになります。
products/1
{
"Brand":"Dewalt",
"Model":"ABC123",
"Category":"Tools"
}
戦略は次のようになります。
strategies/1
{
"ProductId":"products/1",
"PriceCalculation":{
"$type":"...",
"Margin":0.2
}
}
属性だけでなく、関連する製品の属性によっても戦略を照会できる必要があります。たとえば、製品が特定のカテゴリにある特定のマージンを持つすべての戦略を返します。製品データが非正規化され、戦略とともに保存されている場合、製品属性をインデックスに追加するだけで済みます。非正規化せずにこれを行う方法はありますか?
Include メソッドを使用すると、参照されるエンティティを結果セットに含めることができるため、それらを読み込む必要がないことは理解していますが、含まれているエンティティに対するクエリはサポートされていません。同じことがライブ プロジェクションにも当てはまります。参照されるエンティティを結果セットに含めることはできますが、参照されるエンティティの属性によるクエリはサポートされません。
2 つのインデックス (戦略用と製品用) に対して 2 つのクエリを実行し、製品 ID で 2 つの結果セットを結合できます。この場合の問題は、製品コレクションが戦略によって参照される一連の製品と常に同期されているとは限らないことです。より具体的には、製品コレクションには、戦略によって参照されるよりも多くの製品が含まれている可能性があるため、クエリは価格戦略を持たない製品を返す可能性があり、結果セット内の位置を占めている間、戦略に参加することはできません。 .
Map 関数で参照されたエンティティを解決し、参照されたエンティティの属性をインデックスに含めることができれば、うまくいく可能性があります。
編集 私はこれを探しているようです: https://groups.google.com/d/msg/ravendb/k3qvdEb870U/95OWtjL3U3YJ