Ravendb 基本嵌套索引

Ravendb 基本嵌套索引,ravendb,Ravendb,我想创建一个基本的嵌套索引,它只包含包含文档和嵌套数据的id。根据ravenDb文档,我做了如下工作: public class LeaguesIndex : AbstractIndexCreationTask<CommunityDocument> { public class Result { public string CommunityId { get; set; } public Domain.TeamLeague Leagu

我想创建一个基本的嵌套索引,它只包含包含文档和嵌套数据的id。根据ravenDb文档,我做了如下工作:

 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的答案。存储要从索引加载的字段很有用,即使数据是从文档加载的,也会影响性能。在您的情况下,似乎有什么东西阻止了数据的加载。