.net RavenDB:如何进行简单的映射/减少聚合
确定给定一组文档,如下所示:.net RavenDB:如何进行简单的映射/减少聚合,.net,linq,ravendb,.net,Linq,Ravendb,确定给定一组文档,如下所示: { "Name": "A", "Price": 1.50 } { "Name":"B", "Price":4 } { "Name":"A", "Price":10 } {"Results":[{"Name":"Total","Price":"14","Price_Range":"14"}],"IsStale":false,"TotalResults":1} 如何对列表中的价格执行简单的聚合?我不想执行任何分组,只是一个
{
"Name": "A",
"Price": 1.50
}
{
"Name":"B",
"Price":4
}
{
"Name":"A",
"Price":10
}
{"Results":[{"Name":"Total","Price":"14","Price_Range":"14"}],"IsStale":false,"TotalResults":1}
如何对列表中的价格执行简单的聚合?我不想执行任何分组,只是一个简单的标量结果
即总和、平均值等
我尝试了以下两种方法,但均未成功:
仅地图:
和
地图:
减少:
这是我想到的 地图: 减少:
from result in results
group result by result.Name
into g
select new { Name = g.Key, Price = g.Sum(x => x.Price) }
select new
{
Name = g.Key,
Total = g.Sum(x => (double)x.Total)
}
然而,只有当我把价格改成整数时,我才能让它工作。因此,我的两个文档如下所示:
{
"Name": "A",
"Price": 1.50
}
{
"Name":"B",
"Price":4
}
{
"Name":"A",
"Price":10
}
{"Results":[{"Name":"Total","Price":"14","Price_Range":"14"}],"IsStale":false,"TotalResults":1}
我的JSON输出如下所示:
{
"Name": "A",
"Price": 1.50
}
{
"Name":"B",
"Price":4
}
{
"Name":"A",
"Price":10
}
{"Results":[{"Name":"Total","Price":"14","Price_Range":"14"}],"IsStale":false,"TotalResults":1}
显然,将价格更改为整数并不是解决方案。这可能是RavenDB中的一个bug,但我自己对它很陌生,所以我希望这只是我执行
Sum()
的方式,或者是文档中表示数据的方式 这应该能奏效
地图:
减少:
from result in results
group result by result.Name
into g
select new { Name = g.Key, Price = g.Sum(x => x.Price) }
select new
{
Name = g.Key,
Total = g.Sum(x => (double)x.Total)
}
每个文档都经过映射,聚合在Reduce中进行。但是映射出来的模式仍然需要与您的结果相匹配。每个文档的“总数”只是它的价格。所有这些都可以在reduce中求和
Name属性有点没用,它只是提供reduce属性来对每个文档进行分组