RavenDb:使用索引连接数据

时间:2012-03-28 11:32:31

标签: ravendb

在我的数据库中,我有一个案例列表:

{ Id: 1, Owner: "guid1", Text: "Question1" }
{ Id: 2, Owner: "guid1", Text: "Question2" }
{ Id: 3, Owner: "guid2", Text: "Question3" }

在查询数据时,我还想拥有(在我的索引中,结果)每个所有者拥有的案例数量。所以我在这个集合上创建了一个map / reduce索引:

public class RelatedCases
{
    public Guid Owner { get; set; }
    public int Count { get; set; }
}

public class RelatedCaseIndex : AbstractMultiMapIndexCreationTask<RelatedCases>
{
    public RelatedCaseIndex()
    {
        AddMap<CaseDocument> (c => c.Select(a => new { a.Owner, Count = 1 }));

        Reduce = result => result
            .GroupBy(a => a.Owner)
            .Select(a => new 
            { 
                Owner = a.Key, 
                Count = a.Sum(b => b.Count)
            });
    }
}

现在我根本不知道如何生成查询以包含索引中的数据。根据文档我尝试了类似的东西:

session.Query<CaseDocument>().Customize(a => a.Include ...)

或CaseIndex上的TransformResults,但没有正常工作。

我知道我可以重新查询raven,以便在单独的查询中获取所有RelatedCases的列表,但我想在一次往返中执行此操作。

2 个答案:

答案 0 :(得分:3)

您无法查询Cases并动态加入map / reduce索引的结果。这不是它的工作方式,因为每个查询都会针对索引运行,所以你真正要求的是加入两个索引。这是您需要提前做的事情。

换句话说 - 将您要查询的所有信息放入map / reduce索引中。然后,您可以在此索引上运行查询,并在 .Include()中运行您感兴趣的文档。

答案 1 :(得分:-1)

我认为你不需要MultiMap索引,一个简单的MapReduce索引就足够了。

然后您可以这样查询:

session.Query<RelatedCases, RelatedCaseIndex>();

这将带回所有者和计数的RelatedCases列表。