答案 0 :(得分:3)
这应该可以解决问题。
地图:
from doc in docs.Products
select new { Name = "Total", Total = doc.Price }
减少
select new
{
Name = g.Key,
Total = g.Sum(x => (double)x.Total)
}
每个文档都通过Map,聚合发生在Reduce中。但是来自Map的架构仍然需要与您的结果相匹配。每份文件的“总计”仅为其价格。然后将这些全部汇总到reduce中。
Name属性是没用的,它只是为了减少某些东西来对每个文档进行分组。
答案 1 :(得分:0)
这就是我想出来的。
地图:
from doc in docs
where doc["@metadata"]["Raven-Entity-Name"] == "Books"
select new { Name = "Total", Price = doc.Price };
减少
from result in results
group result by result.Name
into g
select new { Name = g.Key, Price = g.Sum(x => x.Price) }
然而,如果我将价格改为整数,我只能让它工作。所以我的两个文档看起来像这样:
{
"Name":"B",
"Price":4
}
{
"Name":"A",
"Price":10
}
我的JSON输出如下所示:
{"Results":[{"Name":"Total","Price":"14","Price_Range":"14"}],"IsStale":false,"TotalResults":1}
显然,将价格改为整数并不是解决方案。它可能是RavenDB中的一个错误,但我自己也很陌生,所以我希望它只是我在做Sum()
的方式或者在文档中表示数据的方式。