스트리밍 비디오가 포함 된 사이트가 있으며 지난 주, 월 및 연도 (롤링 창)에 가장 많이 본 동영상에 대한 세 가지 보고서를 표시하려고합니다.여러 필드로 구성된지도 편집
우리는 비디오 감시한다 ravendb마다에서 문서를 저장 :
public class ViewedContent
{
public string Id { get; set; }
public int ProductId { get; set; }
public DateTime DateViewed { get; set; }
}
우리는 문제가 최선의 지원이 세 가지 보고서를 생성 할 인덱스/mapreduces을 정의하는 방법을 알아내는 데있어.
다음 map/reduce를 시도했습니다. 때문에,이 실제로 컴파일되지 않습니다
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)
};
}
}
그러나,이 쿼리에서 오류가 발생합니다 OrderBy가 잘못되었습니다. Count가 유효한 속성이 아닙니다.
여기에 도움을 주시면 감사하겠습니다.
응하게 당신에게 컴파일 가능한 예를 들어 줄 수 없다! 여기서 정신적 인 변화는 단지 내가 아니라 물체를 그룹화 할 수 있다는 것을 보았습니다. 궁극적으로 우리는 날짜의 롤링 창에서 쿼리해야합니다. 그러나 이것은 내가 필요한 것을 정확하게 제공합니다. 다시 한 번 감사드립니다! –