2014-03-06 36 views
1

我有一个map/reduce索引,看起来像这样(在服务器上定义)。RavenDB在Map/Reduce索引中查询聚集属性

地图:

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); 

然而,我如果有很多结果(如演播室中所示),TotalRequests属性大于1,则不会返回结果。我得到结果当我不包含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) 
    }