2016-02-19 73 views
-1

我试图用RavenDB创建一个复合索引。基本上,我有2个模型,我需要“加入”,并能够对结果执行搜索。RavenDB的复合索引

这里是我的模型的例子:

模型1:

public class UserProfile { 
    public string ProfileId { get; set } 
    public string FirstName { get; set } 
    public string LastName { get; set } 
    public string EmailAddress { get; set } 
} 

模型2:

public class UserProjects { 
    public string UserProjectId { get; set } 
    public List<Project> Projects { get; set } 
} 

这里的项目模型,如果你想知道:

public class Project { 
    public string ProjectId { get; set; } 
    public string Name { get; set; } 
} 

UserProjectId财产如下:users/<Email Address>/projects

我能够创建一个返回所有字段的索引,但我无法搜索某些字段。

这里是我的指标:

public class ProfileProjectIndex : AbstractIndexCreationTask<UserProfile> { 
    Map = profiles => 
     from profile in profiles 
     select new { 
      profile.ProfileId, 
      profile.FirstName, 
      profile.LastName, 
      profile.EmailAddress 
     }; 

    TransformResults = (db, results) => 
     from result in results 
     let project = db.Load<UserProjects>("users/" + profile.EmailAddress + "/projects") 
     select new { 
      result.ProfileId, 
      result.EmailAddress, 
      result.FirstName, 
      result.LastName, 
      project.UserProjectId, 
      project.Projects 
     }; 
} 

现在这个指数,从Web界面查询乌鸦时,返回的数据我能想到的完整列表,但我需要能够基于一些过滤结果列入名单UserProjects.Projects值,例如:

回报与相关项目的所有用户配置文件时Project.Projects.Contains(x => x.ProjectId == "projects/1234")

任何RavenDB大师能告诉我吗?哦,我正在使用RavenDB 2.5。

回答

0
+0

我看着多图索引和他们做的是建立在它所有的映射实体的指标,他们不合并他们在一起。 –

+0

然后,您可以使用减少将它们组合在一起 –

+0

如何?我无法编写将两个文档关联在一起的缩减功能。 –