我有一份城市文档、站点文档。城市可以有多个站点。站点文档中包含城市信息。 RavenDB中约有100个城市文档和10000个站点文档
市文件:
{
"CityCode": "NY",
"CityName": "New York"
}
站点文档:
{
"SiteName": "MOMA",
"CityCode": "NY"
}
目标是获取所有城市的列表以及每个城市的站点数量...
City Sites NY 12 CH 33 BO 56 and so on....
我正在做这个。
int countSites = session.Query<Site>()
.Count();
var SiteCityList = session.Query<Site>()
.Take(countSites)
.ToList()
.GroupBy(x => x.CityCode)
.OrderBy(x => x.Count())
.ToDictionary(x => x.Key, x => x.Count());
这并没有给出 ravendb 中的所有数据。我在任何时候都只能获得 11 行按站点的计数,甚至计数也不准确。我想要的是获取所有 100 个城市的列表以及每个城市的站点数量(以 100 为单位),如上所示。感谢您的帮助。
最佳答案
使用这样的映射/归约索引
public class CityCodeCount : AbstractIndexCreationTask<Site, CityCodeCount.ReduceResult>
{
public class ReduceResult
{
public string CityCode { get; set; }
public int Count { get; set; }
}
public CityCodeCount()
{
Map = sites => from site in sites
select new
{
site.CityCode,
Count = 1
};
Reduce = results => from result in results
group result by result.CityCode
into g
select new
{
CityCode = g.Key,
Count = g.Sum(x => x.Count)
};
}
}
之后就可以轻松查询了。
var results = documentSession.Query<CityCodeCount.ReduceResult, CityCodeCount>()
.ToList();
关于c# - RavenDB - 筛选文档并使用索引/查询获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590274/