2012-02-26 42 views
3

我在尋找RacoonBlog的源代碼,試圖在RavenDB中查找包含在文檔中的集合的查詢方式。我確實閱讀過索引和Map/Reduce,但沒有找到我的答案。RavenDB linq查詢如何工作

在PostsController中有一個名爲Tag的ActionResult,它接受一個字符串參數幷包含以下linq查詢。

var posts = RavenSession.Query<Post>() 
    .Include(x => x.AuthorId) 
    .Statistics(out stats) 
    .WhereIsPublicPost() 
    .Where(post => post.TagsAsSlugs.Any(postTag => postTag == slug)) 
    .OrderByDescending(post => post.PublishAt) 
    .Paging(CurrentPage, DefaultPage, PageSize) 
    .ToList(); 

Where擴展方法調用TagsAsSlugs並執行Any,TagsAsSlugs看起來像這樣。

public IEnumerable<string> TagsAsSlugs 
    { 
     get 
     { 
      if (Tags == null) 
       yield break; 
      foreach (var tag in Tags) 
      { 
       yield return SlugConverter.TitleToSlug(tag); 
      } 
     } 
    } 

如此以來,TagsAsSlugs財產遍歷的標籤集合並查詢需要的所有帖子返回,使每個崗位都可以有標籤集合遍歷?

我懷疑這是因爲Oren's blog是如此之快的情況。

回答

1

Jackson, 不,這不是它的工作原理。索引過程中,我們正在做的工作(在TagsAsSlugs實際上是計算上的節省時間),然後我們保存TagsAsSlugs入索引。 我們查詢那裏存在的標籤索引。

總之,我們不做任何計算,肯定不是在客戶端。