我有一個稍微複雜的指標,我需要在給定的這個文件定義,就像一個RavenDB文件RavenDB指數地圖縮小不同
:
public class PriceDocument
{
public string Id { get; set; }
public Guid PriceId { get; set; }
public decimal Price { get; set; }
public DateTime? PricingDate { get; set; }
public string Source { get; set; }
public int Version { get; set; }
}
我需要讓所有的產品對於一個給定productId
(我能做到這一點,當我查詢) 通過PricingDate
(最新)和Source
所以給出的以下數據是唯一的:
var priceDocument = new PriceDocument {
Price = 1m,
Id = productId + "/1",
PricingDate = new DateTime(2011, 4, 1, 8, 0, 0),
PriceId = productId,
Source = "Bloomberg",
Version = 1
};
var priceDocument1 = new PriceDocument {
Price = 1m,
Id = productId + "/2",
PricingDate = new DateTime(2011, 4, 1,9,0,0),
PriceId = productId,
Source = "Bloomberg",
Version = 1
};
我應該得到的結果priceDocument1,因爲它的最新版本。
到目前爲止,我已經像這樣定義的索引:
Map = docs =>
from priceDocument in docs
select new {
PricingDate = priceDocument.PricingDate,
PricingSource = priceDocument.Source,
Price = priceDocument.Price,
PriceId = priceDocument.PriceId
};
Reduce = results =>
from result in results
group result by new { result.PricingDate, result.Source } into price
select new {
PricingDate = price.Max(p => price.Key.PricingDate),
PricingSource = price.Key.Source,
};
但它不運行時的工作,我發現了一個AbstractIndexingExecuter||8||Failed to index documents for index (my index name)
我在一個單獨的項目重新創建此示例和我可以看到,在Raven Studio的統計數據中,我得到以下錯誤:
Cannot implicitly convert type 'System.DateTimeOffset' to 'int' changed the
DateTime?
toDateTime
並且沒有運氣。
從使用之日起使用,我可以依靠它遞增所以現在的指數看起來是這樣的切換:
Map = docs =>
from priceDocument in docs
select new {
PricingDate = priceDocument.PricingDate,
PricingSource = priceDocument.Source,
ProductId = priceDocument.ProductId,
ProductVersion = priceDocument.Version
};
Reduce = results =>
from result in results
group result by new {
result.PriceId,
result.PricingDate,
result.Source,
result.Version
} into price
select new {
PricingDate = price.Key.PricingDate,
PricingSource = price.Key,
ProductVersion = price.Max(p=> price.Key.Version)
};
現在不引發錯誤,但它也沒有給出結果。
嗨Ayende:感謝您的答案,事情是它必須是唯一的PriceDate和PricingSource(即我可以有2行與同日,只要來源是不同的),並選擇其中一個版本(或日期)是最高的 – roundcrisis
然而,這wasnt全部答案,@ayende烏鴉討論組https://groups.google在回答這個問題。 com/d/topic/ravendb/B9HCmi32YWw /討論和解決方法在這裏https://gist.github.com/1186051 – roundcrisis