繁体   English   中英

Ravendb在同一组文件上多重映射构建查询对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM