1

私は次のドキュメントモデルを持っています:

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クエリを実行する必要があります。

これは行く方法ですか?

4

1 に答える 1