C# RavenDB综合指数
我正在尝试使用RavenDB创建一个复合索引。基本上,我有两个模型,我需要“加入”,并能够执行搜索结果 以下是我的模型示例: 模式1:C# RavenDB综合指数,c#,.net,ravendb,C#,.net,Ravendb,我正在尝试使用RavenDB创建一个复合索引。基本上,我有两个模型,我需要“加入”,并能够执行搜索结果 以下是我的模型示例: 模式1: public class UserProfile { public string ProfileId { get; set } public string FirstName { get; set } public string LastName { get; set } public string EmailAddress {
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 }
}
UserProjectId
属性如下:users//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
};
}
公共类ProfileProjectIndex:AbstractIndexCreationTask{
Map=profiles=>
从配置文件中的配置文件
选择新的{
profile.ProfileId,
profile.FirstName,
profile.LastName,
profile.EmailAddress
};
TransformResults=(数据库,结果)=>
从结果到结果
让project=db.Load(“users/”+profile.EmailAddress+“/projects”)
选择新的{
result.ProfileId,
result.EmailAddress,
result.FirstName,
result.LastName,
project.userprojectd,
项目,项目
};
}
现在,当从web界面查询Raven时,此索引返回我可能需要的完整数据列表,但我需要能够根据UserProjects.Projects
列表中包含的一些值筛选结果,例如:
当Project.projects.Contains(x=>x.projectd==“projects/1234”)时,返回所有与项目关联的用户配置文件。
任何乌鸦大师都能启发我吗?哦,我正在使用RavenDB 2.5。您可能正在查看多地图索引,请参见:
我研究了多映射索引,它们所做的只是创建一个包含所有映射实体的索引,而不是将它们组合在一起。然后可以使用reduce将它们组合在一起。如何?我无法编写将两个文档关联在一起的reduce函数。
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
};
}