हमारे पास एक ऐसी साइट है जिसमें स्ट्रीमिंग वीडियो है और हम पिछले सप्ताह, महीने और वर्ष (रोलिंग विंडो) में सबसे ज्यादा देखे गए वीडियो की तीन रिपोर्ट प्रदर्शित करना चाहते हैं।कई क्षेत्रों द्वारा Ravendb मैप्रिड समूहिंग
हम एक दस्तावेज़ संग्रहीत ravendb हर बार एक वीडियो देखा है:
public class ViewedContent
{
public string Id { get; set; }
public int ProductId { get; set; }
public DateTime DateViewed { get; set; }
}
हम मुसीबत पता लगाना कैसे अनुक्रमित/mapreduces कि उन तीन रिपोर्ट जनरेट होगा सबसे अच्छा समर्थन परिभाषित करने के लिए कर रहे हैं।
हमने निम्नलिखित मानचित्र/कम करने की कोशिश की है। ,
var lastSevenDays = session.Query<ViewedContent, ViewedContentIndex>()
.Where(x => x.DateViewed > DateTime.UtcNow.Date.AddDays(-7))
.GroupBy(x => x.ProductId)
.OrderBy(x => x.Count)
यह वास्तव में संकलन नहीं करता है:
var lastSevenDays = session.Query<ViewedContent, ViewedContentIndex>()
.Where(x => x.DateViewed > DateTime.UtcNow.Date.AddDays(-7));
Error: "DateViewed is not indexed"
अंततः, हम जैसे कुछ क्वेरी करना चाहते हैं:
public class ViewedContentResult
{
public int ProductId { get; set; }
public DateTime DateViewed { get; set; }
public int Count { get; set; }
}
public class ViewedContentIndex :
AbstractIndexCreationTask<ViewedContent, ViewedContentResult>
{
public ViewedContentIndex()
{
Map = docs => from doc in docs
select new
{
doc.ProductId,
DateViewed = doc.DateViewed.Date,
Count = 1
};
Reduce = results => from result in results
group result by result.DateViewed
into agg
select new
{
ProductId = agg.Key,
Count = agg.Sum(x => x.Count)
};
}
}
लेकिन, इस क्वेरी एक त्रुटि फेंकता ऑर्डरबी गलत है; गणना यहां एक वैध संपत्ति नहीं है।
यहां कोई भी सहायता की सराहना की जाएगी।
हाँ बनाता है, कि यह था! यहां मानसिक बदलाव यह देखने में था कि मैं किसी वस्तु पर समूह कर सकता हूं न केवल एक फ़ील्ड। आखिरकार, हमें तारीखों की रोलिंग विंडो पर पूछना होगा। लेकिन, यह मुझे बिल्कुल वही देता है जो मुझे चाहिए। एक बार फिर धन्यवाद! –