2012-01-27 59 views
0

我想爲查詢創建一個索引,我想返回到我的視圖的音頻項目列表以及這些項目的統計數據,這些項目是TotalDownloads & TotalPlays。MultiMap/Reduce - Counts = 0?

這裏是我相關的文檔:

Audio 
- Id 
- ArtistName 
- Name 

AudioCounter 
- AudioId 
- Type 
- DateTime 

這是我目前的指數:

public class AudioWithCounters : AbstractMultiMapIndexCreationTask<AudioWithCounters.AudioViewModel> 
{ 
    public class AudioViewModel 
    { 
     public string Id { get; set; } 
     public string ArtistName { get; set; } 
     public string Name { get; set; } 
     public int TotalDownloads { get; set; } 
     public int TotalPlays { get; set; } 
    } 

    public AudioWithCounters() 
    { 
     AddMap<Audio>(audios => from audio in audios 
           select new 
           { 
            Id = audio.Id, 
            ArtistName = audio.ArtistName, 
            Name = audio.Name, 
            TotalDownloads = 0, 
            TotalPlays = 0 
           }); 

     AddMap<AudioCounter>(counters => from counter in counters 
             where counter.Type == Core.Enums.Audio.AudioCounterType.Download 
           select new 
           { 
            Id = counter.AudioId, 
            ArtistName = (string)null, 
            Name = (string)null, 
            TotalDownloads = 1, 
            TotalPlays = 0 
           }); 

     AddMap<AudioCounter>(counters => from counter in counters 
             where counter.Type == Core.Enums.Audio.AudioCounterType.Download 
             select new 
             { 
              Id = counter.AudioId, 
              ArtistName = (string)null, 
              Name = (string)null, 
              TotalDownloads = 0, 
              TotalPlays = 1 
             }); 

     Reduce = results => from result in results 
          group result by result.Id 
           into g 
           select new 
           { 
            Id = g.Key, 
            ArtistName = g.Select(x => x.ArtistName).Where(x => x != null).First(), 
            Name = g.Select(x => x.Name).Where(x => x != null).First(), 
            TotalDownloads = g.Sum(x => x.TotalDownloads), 
            TotalPlays = g.Sum(x => x.TotalPlays) 
           }; 
    } 
} 

但是,我TotalDownloads & TotalPlays總是0在那裏即使有應該是數據。我究竟做錯了什麼?

回答

2

在reduce函數中,將.First()替換爲.FirstOrDefault(),然後運行。

除此之外,第二個映射函數中還有一個拼寫錯誤,因爲您正在過濾相同的AudioCounterType.Download。

+0

謝謝,不能相信這是一個簡單的修復。用這個拉出我的頭髮好幾個小時! – 2012-01-27 03:21:40