时间:2010-07-26 09:34:09

标签: .net linq ravendb

2 个答案:

答案 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()的方式或者在文档中表示数据的方式。