私は次のドキュメントモデルを持っています:
public class Product
{
public int Id {get;set;}
public string Name {get;set;}
// ...
}
public class Customer
{
public int Id {get;set;}
public string Name {get;set;}
// ...
}
public class ProductOrder
{
public int Id {get;set;}
public int ProductId {get;set;}
public int CustomerId {get;set;}
public int Quantity {get;set;}
// ...
}
クエリを実行するときに、注文した製品の数 ( ) と一意の顧客Product
も知りたいです。Quantity
と同じで、Customer
注文した商品の数を取得したい。
RavenDB でこれを達成する方法は? インデックスを使用すると、Load<>
クエリを実行するエンティティを参照するすべてのエンティティではなく、別のエンティティへの可能性しかありません。
製品の注文数は非常に多くなる可能性があるため、それらをドキュメントに追加していないため、またはProduct
を使用したインデックス作成中に注文にアクセスできません。Include<>
LoadDocument<>
私のモデルは DocumentDB に対して間違っていますか、またはそれらの情報を取得する別の方法はありますか? もしそうなら、どうすればこれをより良くすることができますか?
ありがとう。
アップデート
これが注文数の私のインデックスです。
public class ProductOrder_CountByProduct : AbstractIndexCreationTask<ProductOrder, ProductOrder_CountByProduct.Result>
{
public class Result
{
public int ProductId { get; set; }
public int NumberOfOrders { get; set; }
}
public ProductOrder_CountByProduct()
{
Map = orders => from order in orders
select new
{
ProductId = order.ProductId,
NumberOfOrders = order.Quantity
};
Reduce = results => from result in results
group result by result.ProductId
into g
select new
{
ProductId = g.Key,
NumberOfOrders = g.Sum(p => p.NumberOfOrders)
};
}
}
これで、製品 ID ごとに注文数を取得できます。
var result = documentSession.Query<ProductOrder_CountByProduct.Result, ProductOrder_CountByProduct>()
.FirstOrDefault(p => p.ProductId == product.Id)
?? new ProductOrder_CountByProduct.Result();
var count = result.NumberOfOrders;
CountByCustomer
クエリ/インデックスについても同じです。これまでのところ、 の単一の結果としては良好ですProduct
。
しかし、私の目標は、製品を (名前または説明で) クエリし、次の配列を埋めることでした。
public class ProductViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int NumberOfOrders { get; set; }
public int NumberOfCustomers { get; set; }
//... maybe NumberOfCustomersFromUSA, etc.
}
CountByProduct
およびインデックスを使用CountByCustomer
して、製品クエリのすべての結果を反復処理し、結果ごとに 2 つのCountByXY
クエリを実行する必要があります。
これは行く方法ですか?