RavenDb Multi-map/reduce 索引,以防没有共同 属性 分组依据

RavenDb Multi-map/reduce index in case of no common property to group by

我有以下文件:

public class Post
{
   public string Id {get;set;}
   public string BlogId {get;set;}
   public string AuthorId {get;set;}
   public string Content {get;set;}
}

public class Blog
{
  public string Id {get;set;}
  public string Language {get;set;}
}

我需要创建一个索引,以便我可以计算特定语言博客中每个用户的帖子数(所以我想过滤 Blog.Language 属性)。

首先我认为 multimap/reduce 索引是一个可行的方法:

AddMap<Post>((posts) => from post in posts
                        select new 
                        {
                          UserId = post.AuthorId,
                          Count = 1,
                          Language = Language.None
                        });
AddMap<Blog>((blogs) => from blog in blogs
                        select new
                        {
                          UserId = null,
                          Count = 0,
                          Language = blog.Language 
                        });

但是如您所见,博客中没有指定 UserId 属性,所以我认为我无法使 Reduce 部分工作(因为我打算减少 UserId 属性)。

据我了解,您不需要索引中的博客,而是它们的语言:

AddMap<Post>((posts) => from post in posts
                        select new 
                        {
                          UserId = post.AuthorId,
                          Count = 1,
                          Language = LoadDocument<Blog>(post.BlogId).Language
                        });

然后减少 UserIdLanguage:

Reduce = results => from result in results 
                    group result by new { result.UserId, result.Language }
                    into g 
                    select new { 
                        UserId = g.Key.UserId, 
                        Count = g.Sum(x => x.Count),
                        Language = g.Key.Language
                    };