2012-01-27 2 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에서 필터링하므로 두 번째 map-function에 오타가 있습니다. 다운로드.

+0

감사합니다. 그렇게 간단한 수정이라고 생각하지 마십시오. 이걸로 몇 시간 동안 내 머리카락을 꺼내려고 했어! –

관련 문제