更新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我已經嘗試了兩種不同的查詢,我不確定有什麼不同,有人可以解釋嗎?
現在,我得到一個錯誤:
集團仍爲空:(
讓我解釋一下我試圖在純SQL來完成:
select min(Ask), count(*) as TickCount from Ticks
where Time between '2012-04-23' and '2012-04-24)
繼續這裏,http://stackoverflow.com/questions/10853783/map-reduce-in-ravendb-update-1 下面的答案,奇怪的是被獎勵爲有用的將不會被接受:) – Janus007