【问题标题】:RavenDb: Join data with indexRavenDb:使用索引连接数据
【发布时间】:2012-03-28 23:09:31
【问题描述】:

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

{ 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 以获取所有相关案例的列表,但我想在一次往返中完成。

【问题讨论】:

    标签: ravendb


    【解决方案1】:

    您无法查询案例并将结果与​​ map/reduce 索引即时连接。这不是它的工作原理,因为 每个 查询都会针对一个索引运行,所以你真正要问的是连接两个索引。这是您需要预先做的事情。

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

    【讨论】:

      【解决方案2】:

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

      然后你可以像这样查询它:

      session.Query<RelatedCases, RelatedCaseIndex>();
      

      这将带回一个包含所有者和计数的相关案例列表。

      【讨论】:

      • 是的,我知道,这只是我只留下一张地图的简化案例。
      猜你喜欢
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2016-01-08
      相关资源
      最近更新 更多