在我的数据库中,我有一个案例列表:
{ 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的列表,但我想在一次往返中执行此操作。
答案 0 :(得分:3)
您无法查询Cases并动态加入map / reduce索引的结果。这不是它的工作方式,因为每个查询都会针对索引运行,所以你真正要求的是加入两个索引。这是您需要提前做的事情。
换句话说 - 将您要查询的所有信息放入map / reduce索引中。然后,您可以在此索引上运行查询,并在 .Include()中运行您感兴趣的文档。
答案 1 :(得分:-1)
我认为你不需要MultiMap索引,一个简单的MapReduce索引就足够了。
然后您可以这样查询:
session.Query<RelatedCases, RelatedCaseIndex>();
这将带回所有者和计数的RelatedCases列表。