2012-01-27 4 views
0

RavenDb이 쿼리하는 동안 계산을 수행하지 않는다는 것을 많이 읽었습니다. 예를 들어 여기 Ayende의 기사에서 인용 RavenDB의 기능 "The Pain of Implementing LINQ Providers"RavenDb 쿼리 도중 계산하기

하나는 쿼리 동안 전혀 계산을 수행 없다는 것입니다이다; 쿼리에 대한 모든 데이터는 이미 입니다. 즉, 쿼리 속도가 매우 빨라질 수 있습니다.

그러나 동시에 쿼리 중에 계산을 수행 할 수있는 라이브 프로젝션 기능이 있습니다. 그것은

TransformResults = (database, post) => from post in posts 
             order by post.DateTime 
             select new 
               { 
                Id = post.Id, 
                CommentsCount = post.Comments.Sum() 
               } 

그래서 RavenDb는 즉석에서 계산을 할 수 없습니다 예를 들어, 여기에 내가 계산 정렬 및 합계 사용할 수 있습니까?

업데이트. 쿼리 시간 동안 실제로 물건을 계산 (정렬)해야하는 경우를 한 가지 더 제공하기로 결정했습니다. 작업 : (우리는 우리의 블로그 시스템에 많은 블로그가 있다고 가정) 특정 BlogId 10 개 마지막 게시물 코멘트를 선택

public class LastPostsCommentsIndex: AbstractIndexCreationTask<Post> 
{ 
    public class IndexResult 
    { 
     public string BlogId {get; set;} 
    } 

    public class PostComment 
    { 
     public string PostId { get; set; } 
     public DateTime DateTime { get; set; } 
     public string Author { get; set; } 
     public string Text { get; set; } 
    } 

    public LastPostsCommentsIndex() 
    { 
     Map = posts => from post in posts 
         select new { BlogId = post.BlogId }; 

     TransformResults = (database, posts) => from post in posts 
               from comment in post.Comments 
               orderby comment.DateTime descending 
               select new { PostId = post.Id, DateTime = comment.DateTime, Author = comment.Author, Text = comment.Text }; 
    } 
} 

이 경우 우리는지도의 색인 결과를 정렬 할 수 없다 - 우리가 결과를 정렬해야 파리.

답변

2

네, 맞습니다. 하지만 이건 따기 따기 야, 그치?

누군가이 컨텍스트에서 "계산"에 대해 말하는 경우 여러 문서에서 계산 (예 : 합계, 평균, 개수)을 의미합니다.

+0

나는 그것을 분명히하고 싶었다. 실제로 TransformResults 중에 좀 더 무겁고 교차 문서 계산을 할 수 있는지 여부를 확신 할 수 없습니다. – SiberianGuy

+0

나는 그것에 대해 조금 더 생각했다. 적어도 TransformResults에 대한 정렬 작업을 수행 할 수 있습니다. – SiberianGuy

+0

흠, 확실하지 않아요. "TransformResults 정렬"이란 의미를 이해합니다. –