Каков правильный способ вычисления простого среднего значения с помощью RavenDB?RavenDB вычислить среднее значение
Мой объект:
class Song
{
public int CommunityRank { get; set; }
}
Моя первая наивная мысль, «Я буду просто использовать .sum», но я получил сообщение об ошибке выполнения говоря Raven не делает этого из соображений производительности, что делает смысл.
Следующая мысль: «Я сделаю небольшой индекс карты/уменьшения, который вычисляет его!» Так что я пришел с этим:
public Songs_CommunityRankIndex()
{
Map = songs => from song in songs
select new
{
Id = song.Id, // # Hack? I only use this for grouping in the reduce.
SongCount = 1,
RankSum = song.CommunityRank
};
Reduce = results => from result in results
group result by result.Id into g
select new
{
Id = default(string),
SongCount = g.Sum(s => s.SongCount),
RankSum = g.Sum(s => s.RankSum)
};
}
...
// Now to calculate the average:
var communityRankStats = session
.Query<Song, Songs_CommunityRankIndex>()
.As<Songs_CommunityRankIndex.Results>()
.FirstOrDefault();
if (communityRankStats != null)
{
var averageSongRank = (double)communityRankStats.RankSum/communityRankStats.SongCount;
}
Это работает, я думаю, но чувствует себя хак, потому что нет на самом деле ничего группу по, так что я просто сгруппированный на песню ID.
Есть ли лучший способ?
Judah, Это совершенно сломан. Кажется, что вы хотите сделать это на одном документе, но поскольку ваше сокращение возвращает null для Id, все это будет смешиваться. –
Спасибо. Наверное, я не понял последствий наличия нулевого идентификатора в сокращении. –