使用RavenDB映射/减少分片数据

使用RavenDB映射/减少分片数据,ravendb,Ravendb,当数据在两个节点上分片时,我很难让map reduce示例正常工作。我正在存储与记录在两个本地ravenDB节点上的应用程序错误相关的文档,错误文档如下所示: 节点1上的文档示例,共有6个 errors/1/6 { "UniqueId": "c62c7e30-8ec7-45af-88e4-da023d796727", "ApplicationName": "MyAppName" } 节点2上的文档示例,共有7个 errors/2/6 --Error stored on shard n

当数据在两个节点上分片时,我很难让map reduce示例正常工作。我正在存储与记录在两个本地ravenDB节点上的应用程序错误相关的文档,错误文档如下所示:

节点1上的文档示例,共有6个

errors/1/6
{
  "UniqueId": "c62c7e30-8ec7-45af-88e4-da023d796727",
  "ApplicationName": "MyAppName"
}
节点2上的文档示例,共有7个

errors/2/6  --Error stored on shard node 2
{
  "UniqueId": "7e0b0f87-9d75-4e70-9fa0-d64a18bc88dc",
  "ApplicationName": "MyAppName"
}
运行此查询时:

public class ApplicationNames : AbstractIndexCreationTask<ErrorDocument, Application>
{
    public ApplicationNames()
    {
         Map = errors => from error in errors
                        select new { error.ApplicationName, Count = 1 };

        Reduce = results => from error in results
                            group error by new { error.ApplicationName, error.Count } into g
                            select new { g.Key.ApplicationName, Count = g.Sum(x=> x.Count) };
    }
}
公共类应用程序名称:AbstractIndexCreationTask
{
公共应用程序名称()
{
Map=errors=>from error in errors
选择新{error.ApplicationName,Count=1};
Reduce=结果=>来自结果中的错误
按新的{error.ApplicationName,error.Count}将错误分组到g中
选择新的{g.Key.ApplicationName,Count=g.Sum(x=>x.Count)};
}
}
我得到了两个结果;一个数为6,第二个数为7。我期望来自每个碎片的两个结果合并成一个计数为13的结果。我不确定我是否做错了什么,或者这不是应该的工作方式。我按照在上的示例设置了分片策略。

Grant, RavenDB目前不处理多个节点上的reduce。 您可以通过以下方式自己完成:

session.Query<Application, ApplicationNames>()
   .ToList()
   .Select(new ApplicationNames().Reduce)
   .ToList();
session.Query()
托利斯先生()
.Select(新应用程序名称().Reduce)
.ToList();

late reply,但由于Reduce属性受到保护,编译器对此解决方案表示不满。关于Reduce受到保护,我还尝试在我的ApplicationNames索引上创建一个“新”Reduce属性,但这需要使用匿名类型来定义以匹配,我认为这是不可能的。我对这个答案感到非常惊讶,为什么不在碎片上支持reduce?这个功能什么时候实现?现在有更好的答案吗?还是这样?