我有以下文档模型:
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;}
// ...
}
在查询 a 时,Product
我还想知道订购产品的数量 ( Quantity
) 和唯一客户。相同Customer
,我想获得订购产品的数量。
如何使用 RavenDB 实现这一目标?使用索引,我只能访问Load<>
另一个实体,而不是所有引用我查询的实体的实体。
由于产品的订单数量可能非常多,因此我没有将它们添加到文档中,因此在使用orProduct
进行索引期间我无法访问订单。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
andCountByCustomer
索引来遍历产品查询的每个结果并CountByXY
为每个结果执行 2 个查询。
这是要走的路吗?