2014-03-06 4 views
1

다음과 같은 map/reduce 인덱스가 있습니다 (서버에 정의 된대로).RavenDB 쿼리의 집계/축소 인덱스 집계/축소 인덱스

지도 :

from request in docs.Master_Requests 
    select new 
    { 
     DocumentID = Guid.NewGuid(), 
     Year = request.Timestamp.Year, 
     Month = request.Timestamp.Month, 
     Day = request.Timestamp.Day, 
     Hour = request.Timestamp.Hour, 
     Minute = request.Timestamp.Minute, 
     RequestBytes = request.RequestBytes, 
     ResponseBytes = request.ResponseBytes, 
     TotalRequests = 1 
    } 

가 감소 : 나는지도의 결과를 조회하기 위해 노력하고있어

from result in results 
group result by new { result.Year, result.Month, result.Day, result.Hour, result.Minute } 
    into g 
    select new 
    { 
     DocumentID = Guid.NewGuid(), 
     Year = g.Key.Year, 
     Month = g.Key.Month, 
     Day = g.Key.Day, 
     Hour = g.Key.Hour, 
     Minute = g.Key.Minute, 
     RequestBytes = g.Sum(r => r.RequestBytes), 
     ResponseBytes = g.Sum(r => r.ResponseBytes), 
     TotalRequests = g.Sum(r => r.TotalRequests) 
    } 

을 /과 같이 인덱스를 감소 :

session.Query<UsageAggregate>("RequestAggregateByMinute", true) 
           .Where(a => a.TotalRequests >= 1); 

을 그러나, 나는 1보다 큰 TotalRequests 속성을 가진 많은 결과가있을 때 결과가 돌아 오지 않습니다. 결과가 나타납니다. where 술어를 포함하지 않고 집계 된 속성 (RequestBytes, ResponseBytes 및 TotalRequests) 이외의 다른 속성을 필터링 할 때도 결과를 얻습니다.

누군가 내가 잘못하고있는 것을 이해하도록 도와 줄 수 있습니까?

+0

조금 더 자세한 정보. 집계 된 필드에 대해 범위 쿼리를 수행 할 수 없습니다 (예 : 작동하지 않는 것보다 큼, 같음은 작동 함). –

답변

1

좋아, 알아 냈어. 어떤 이유로 든 Sum()의 결과를 캐스팅해야했습니다. 까마귀 서버에 전송되면 동적 컴파일과 관련이 있어야합니다.

from result in results 
group result by new { result.Year, result.Month, result.Day, result.Hour, result.Minute } 
    into g 
    select new 
    { 
     DocumentID = Guid.NewGuid(), 
     Year = g.Key.Year, 
     Month = g.Key.Month, 
     Day = g.Key.Day, 
     Hour = g.Key.Hour, 
     Minute = g.Key.Minute, 
     RequestBytes = (Int32)g.Sum(r => r.RequestBytes), 
     ResponseBytes = (Int32)g.Sum(r => r.ResponseBytes), 
     TotalRequests = (Int32)g.Sum(r => r.TotalRequests) 
    }