Ravendb 基本嵌套索引
我想创建一个基本的嵌套索引,它只包含包含文档和嵌套数据的id。根据ravenDb文档,我做了如下工作:Ravendb 基本嵌套索引,ravendb,Ravendb,我想创建一个基本的嵌套索引,它只包含包含文档和嵌套数据的id。根据ravenDb文档,我做了如下工作: public class LeaguesIndex : AbstractIndexCreationTask<CommunityDocument> { public class Result { public string CommunityId { get; set; } public Domain.TeamLeague Leagu
public class LeaguesIndex : AbstractIndexCreationTask<CommunityDocument>
{
public class Result
{
public string CommunityId { get; set; }
public Domain.TeamLeague League { get; set; }
}
public LeaguesIndex()
{
Map = communities => from community in communities
from league in community.TeamLeagues
select new
{
CommunityId = community.Id.Replace("CommunityDocuments/", string.Empty),
League = league
};
}
}
公共类联盟索引:AbstractIndexCreationTask
{
公开课成绩
{
公共字符串CommunityId{get;set;}
public Domain.TeamLeague{get;set;}
}
公众联盟索引()
{
Map=社区=>来自社区中的社区
来自社区联盟。团队联盟
选择新的
{
CommunityId=community.Id.Replace(“CommunityDocuments/”,string.Empty),
联盟
};
}
}
并查询:
var leagues = session
.Query<LeaguesIndex.Result, LeaguesIndex>()
.Where(x => x.CommunityId == input.Id)
.OfType<CommunityDocument>()
.ToList();
var-leagues=会话
.Query()
.Where(x=>x.CommunityId==input.Id)
第()类
.ToList();
这确实产生了一个结果,但结果包含了整个社区文档。我怎样才能得到联赛索引。结果类?(我尝试删除“of type”行,但它不喜欢。)
编辑-正在工作:
public class LeaguesIndex : AbstractIndexCreationTask<CommunityDocument, LeaguesIndex.Result>
{
public class Result
{
public string CommunityId { get; set; }
public Domain.League League { get; set; }
}
public LeaguesIndex()
{
Map = communities => from community in communities
from league in community.TeamLeagues
select new
{
CommunityId = community.Id.Replace("CommunityDocuments/", string.Empty),
League = league
};
StoreAllFields(FieldStorage.Yes);
}
}
公共类联盟索引:AbstractIndexCreationTask
{
公开课成绩
{
公共字符串CommunityId{get;set;}
公共域。联盟{get;set;}
}
公众联盟索引()
{
Map=社区=>来自社区中的社区
来自社区联盟。团队联盟
选择新的
{
CommunityId=community.Id.Replace(“CommunityDocuments/”,string.Empty),
联盟
};
StoreAllFields(FieldStorage.Yes);
}
}
查询:
var lastLeague = session
.Query<LeaguesIndex.Result, LeaguesIndex>()
.Where(x => x.CommunityId == input.Id)
.AsProjection<LeaguesIndex.Result>()
.LastOrDefault();
var lastLeague=会话
.Query()
.Where(x=>x.CommunityId==input.Id)
.AsProjection()
.LastOrDefault();
对于RavenDB 3.5,您应该使用ProjectFromIndexFieldsInto
:
var lastLeague = session
.Query<LeaguesIndex.Result, LeaguesIndex>()
.Where(x => x.CommunityId == id)
.ProjectFromIndexFieldsInto<LeaguesIndex.Result>()
.LastOrDefault();
var lastLeague=会话
.Query()
.其中(x=>x.CommunityId==id)
.ProjectFromIndexFieldsInto()项目
.LastOrDefault();
有关详细信息,请参阅
链接文档中的注释:
Projections向服务器请求一个要下载的字段数组,如果索引包含这些字段(存储它们),它们将直接来自索引,如果不是,将使用文档中的值
这意味着,除非将数据存储在索引中,否则数据将从文档中加载,从而降低性能
假设RavenDB 4.0的旧答案:
public class LeaguesIndex : AbstractIndexCreationTask<CommunityDocument, LeaguesIndex.Result>
{
public class Result
{
public string CommunityId { get; set; }
public Domain.League League { get; set; }
}
public LeaguesIndex()
{
Map = communities => from community in communities
from league in community.TeamLeagues
select new
{
CommunityId = community.Id.Replace("CommunityDocuments/", string.Empty),
League = league
};
StoreAllFields(FieldStorage.Yes);
}
}
使用ProjectInto
:
var lastLeague = session
.Query<LeaguesIndex.Result, LeaguesIndex>()
.Where(x => x.CommunityId == id)
.ProjectFromIndexFieldsInto<LeaguesIndex.Result>()
.LastOrDefault();
var-leagues=会话
.Query()
.Where(x=>x.CommunityId==input.Id)
.ProjectInto()
.ToList();
有关更多详细信息,请参见。对于RavenDB 3.5,您应该使用
项目从索引字段导入到:
var lastLeague = session
.Query<LeaguesIndex.Result, LeaguesIndex>()
.Where(x => x.CommunityId == id)
.ProjectFromIndexFieldsInto<LeaguesIndex.Result>()
.LastOrDefault();
var lastLeague=会话
.Query()
.其中(x=>x.CommunityId==id)
.ProjectFromIndexFieldsInto()项目
.LastOrDefault();
有关详细信息,请参阅
链接文档中的注释:
Projections向服务器请求一个要下载的字段数组,如果索引包含这些字段(存储它们),它们将直接来自索引,如果不是,将使用文档中的值
这意味着,除非将数据存储在索引中,否则数据将从文档中加载,从而降低性能
假设RavenDB 4.0的旧答案:
public class LeaguesIndex : AbstractIndexCreationTask<CommunityDocument, LeaguesIndex.Result>
{
public class Result
{
public string CommunityId { get; set; }
public Domain.League League { get; set; }
}
public LeaguesIndex()
{
Map = communities => from community in communities
from league in community.TeamLeagues
select new
{
CommunityId = community.Id.Replace("CommunityDocuments/", string.Empty),
League = league
};
StoreAllFields(FieldStorage.Yes);
}
}
使用ProjectInto
:
var lastLeague = session
.Query<LeaguesIndex.Result, LeaguesIndex>()
.Where(x => x.CommunityId == id)
.ProjectFromIndexFieldsInto<LeaguesIndex.Result>()
.LastOrDefault();
var-leagues=会话
.Query()
.Where(x=>x.CommunityId==input.Id)
.ProjectInto()
.ToList();
有关更多详细信息,请参阅。有关我的工作内容,请参阅编辑。我使用的是3.5,所以projectinto不起作用,但Asprojection起作用。而且,我似乎必须存储所有字段,否则每次都会得到一个空返回值。对于这样一个基本的索引,这真的是必要的吗?我用额外的信息更新了Ravendb3.5的答案。存储要从索引加载的字段很有用,即使数据是从文档加载的,也会影响性能。在你的例子中,有些东西甚至似乎阻止了数据的加载。请参阅编辑以了解我的工作内容。我使用的是3.5,所以projectinto不起作用,但Asprojection起作用。而且,我似乎必须存储所有字段,否则每次都会得到一个空返回值。对于这样一个基本的索引,这真的是必要的吗?我用额外的信息更新了Ravendb3.5的答案。存储要从索引加载的字段很有用,即使数据是从文档加载的,也会影响性能。在您的情况下,似乎有什么东西阻止了数据的加载。