在我的ravendb中,我有2个文件:国家和城市
城市文档看起来像这样 ID 名称 CountryId
国家/地区文档如下所示 ID 名称
目前我有一个索引,我将所有城市作为列表检索,这是有效的。 但我宁愿想要检索按国家分组的所有城市 这就是我所拥有的
public class City_ByCountry
{
public string CityId { get; set; }
public string CityName { get; set; }
public string CountryName { get; set; }
}
Map = (city => from cit in city
let cou = LoadDocument<Country>(cit.CountryId)
select new City_ByCountry
{
CityId = cit.Id,
CityName = cit.Name,
CountryName = cou.Name
});
这有效但给我一个所有城市的列表(id,name,countryName)
但我想要一个像这样的列表
CountryName [ 列出城市]
CountryName [ 列出城市]
等
我可以通过减少结果来做到这一点吗?或者这样做的正确方法是什么?
答案 0 :(得分:1)
我认为通过减少这是可能的。有关如何执行高级索引的信息,请参阅Ayende的帖子Awesome indexing with RavenDB。
我试图修改Ayende的例子来满足你的需求(只是在记事本上,所以我不知道它是否编译):
public class City_ByCountry : AbstractIndexCreationTask<City, City_ByCountry.ReduceResult>
{
public class ReduceResult
{
public string CountryId { get; set; }
public string CountryName { get; set; }
public City[] Cities { get; set; }
}
public City_ByCountry()
{
Map = cities =>
from city in cities
select new
{
CountryId= city.CountryId,
CountryName = LoadDocument<Country>(city.CountryId),
Cities = new [] { city }
};
Reduce = cities =>
from city in cities
group city by city.CountryId
into g
select new
{
CountryId = g.Key,
CountryName = g.First().CountryName,
Cities = g.SelectMany(x => x.Cities)
};
}
}