2012-05-29 95 views
0

更新1,以下Ayende的回答地圖在RavenDb減少

這是我第一次出遠門到RavenDb並試用一下我寫了一個小的map/reduce,可惜結果是空的?

我有160萬左右的文件加載到RavenDb

的文件:

public class Tick 
{ 
    public DateTime Time; 
    public decimal Ask; 
    public decimal Bid; 
    public double AskVolume; 
    public double BidVolume; 
} 

,並希望得到向隨時間的特定週期的最小值和最大值。

的時間收集被定義爲:

var ticks = session.Query<Tick>().Where(x => x.Time > new DateTime(2012, 4, 23) && x.Time < new DateTime(2012, 4, 24, 00, 0, 0)).ToList(); 

這給了我90280頁的文件,到目前爲止,一切順利。

但隨後的map/reduce:

Map = rows => from row in rows 
          select new 
          { 
           Max = row.Bid, 
           Min = row.Bid, 
           Time = row.Time, 
           Count = 1 
          }; 

Reduce = results => from result in results 
           group result by new{ result.MaxBid, result.Count} into g 
           select new 
           { 
            Max = g.Key.MaxBid, 
            Min = g.Min(x => x.MaxBid), 
            Time = g.Key.Time, 
            Count = g.Sum(x => x.Count) 

           }; 

...

private class TickAggregationResult 
{ 
    public decimal MaxBid { get; set; } 
     public decimal MinBid { get; set; } 
     public int Count { get; set; } 

    } 

然後我創建索引,並嘗試進行查詢:

Raven.Client.Indexes.IndexCreation.CreateIndexes(typeof(TickAggregation).Assembly, documentStore); 


     var session = documentStore.OpenSession(); 

     var g1 = session.Query<TickAggregationResult>(typeof(TickAggregation).Name); 


     var group = session.Query<Tick, TickAggregation>() 
         .Where(x => x.Time > new DateTime(2012, 4, 23) && 
            x.Time < new DateTime(2012, 4, 24, 00, 0, 0) 
           ) 
      .Customize(x => x.WaitForNonStaleResults()) 
              .AsProjection<TickAggregationResult>(); 

但該集團是隻是空的:(

因爲你可以se e我已經嘗試了兩種不同的查詢,我不確定有什麼不同,有人可以解釋嗎?

現在,我得到一個錯誤:enter image description here

集團仍爲空:(

讓我解釋一下我試圖在純SQL來完成:

select min(Ask), count(*) as TickCount from Ticks 
where Time between '2012-04-23' and '2012-04-24) 
+0

繼續這裏,http://stackoverflow.com/questions/10853783/map-reduce-in-ravendb-update-1 下面的答案,奇怪的是被獎勵爲有用的將不會被接受:) – Janus007

回答

1

這是不是你將如何使用Map/reduce

from row in rows where row.Time > new DateTime(2012, 4, 23) && row.Time < new DateTime(2012, 4, 24, 00, 0, 0) 

創建一個地圖縮小索引,它將時間作爲按鍵組的一部分進行合併,然後您可以對該索引進行查詢。

+0

嗨Ayende ...只是用更多的信息更新了我的問題。 – Janus007