[英]Ravendb multimapping on the same set of documents to build query object?
我正在学习RavendDb,在项目中使用它并试图做些什么。 我没有SQL /关系数据库经验的任何背景,这就是为什么我发现使用map reduce和文档数据库更容易。
我试图创建一个静态索引来创建一个对象,保持计数4个条件字段的出现,而不是4个静态索引,并在4个数据库查询后组合结果。
这是静态索引:
public class Client_ProductDeploymentSummary : AbstractIndexCreationTask<Product, ClientProductDeploymentResult>
{
public Client_ProductDeploymentSummary()
{
Map = products =>
from product in products
select new {
product.ClientName,
NumberProducts = 1,
NumberProductsWithCondition = 0,
NumberProductsWithoutCondition = 0,
NumberProductsConditionTestInconclusive = 0
};
Map = products =>
from product in products
where product.TestResults.Condition == true
select new
{
product.ClientName,
NumberProducts = 0,
NumberProductsWithCondition = 1,
NumberProductsWithoutCondition = 0,
NumberProductsConditionTestInconclusive = 0
};
Map = products =>
from product in products
where product.TestResults.Condition == false
select new
{
product.ClientName,
NumberProducts = 0,
NumberProductsWithCondition = 0,
NumberProductsWithoutCondition = 1,
NumberProductsConditionTestInconclusive = 0
};
Map = products =>
from product in products
where product.TestResults.Condition == null
select new
{
product.ClientName,
NumberProducts = 0,
NumberProductsWithCondition = 0,
NumberProductsWithoutCondition = 0,
NumberProductsConditionTestInconclusive = 1
};
Reduce = results =>
from result in results
group result by result.ClientName
into g
select new ClientProductDeploymentResult()
{
ClientName = g.Key,
NumberProducts = g.Sum(x => x.NumberProducts),
NumberProductsWithCondition = g.Sum(x => x.NumberProductsWithCondition),
NumberProductsWithoutCondition = g.Sum(x => x.NumberProductsWithoutCondition),
NumberProductsConditionTestInconclusive = g.Sum(x => x.NumberProductsConditionTestInconclusive)
};
}
}
我为每个选择新语句添加了4个变量,以便在我的单元测试中编译和部署索引。 我似乎无法使用AddMap(...)函数,就像我在一些例子中看到的那样(我意识到我只是覆盖了Map变量)。 没有那么多的客户,在10或100,但可能很多产品,绝对在每个客户1000。
有没有一种简洁的方法来构建这个索引的意图? 或者是每个字段减少一个地图并将结果与调用者代码相结合更好的方法?
MultiMap索引具有不同的基类。 您将从AbstractMultiMapIndexCreationTask
继承以创建多图索引。
但是,您在此处描述的内容不适用于multimap。 当数据来自不同的源文档时,您使用multimap,而不是在条件不同时。 您需要的是一个具有内联条件逻辑的map语句。
Map = products =>
from product in products
select new {
product.ClientName,
NumberProducts = 1,
NumberProductsWithCondition = product.TestResults.Condition == true ? 1 : 0,
NumberProductsWithoutCondition = product.TestResults.Condition == false? 0 : 1,
NumberProductsConditionTestInconclusive = product.TestResults.Condition == null ? 1 : 0
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.