1

我在 RavenDb 中有这样的东西:

路径 [hasMany] 目标 [hasMany] 成就

所以我有一份包含目标和成就的文件。

如果它是传统数据库,我可以进行此查询

select g.id, count(a.id)
from path p
join goals g on p.id = g.pathId
join achievement a on a.id = g.id
group by goal.id

如何在 ravendb 中进行此查询?

现在我正在这样做:

Path path = RavenSession.Load<Path>(pathId);

path.Goals.Select(x => new
{
    Id = x.Id,
    Name = x.Name,
    TOnCourse = x.Achievements.Where(y => y.Resolution == Resolution.OnCourse).Count(),
    TAstray = x.Achievements.Where(y => y.Resolution == Resolution.Astray).Count()
});

我不想这样做,因为我认为我正在加载所有“目标”和“成就”,而我只想在数据库中进行聚合(ravendb)

如果你想知道我的模型中真正的路径、目标和成就是我的“宠物”项目http://dpath.apphb.com/

编辑 我想我会得到那些“计算”的值并将它们作为属性放在目标中,因为我认为计算将非常普遍,因此保持简单,因为无法删除成就,并且用户将具有“关系” 有目标和成就的数量以获得“我的统计数据”

不过,我想知道您将如何在 RavenDb 中完成该查询

谢谢!

4

1 回答 1

0

为此,您只加载了一个文档,因此这可能不是问题。您没有加载任何其他内容。

您可以在索引中执行此操作,然后从那里加载存储的字段,但我认为您不需要这个,除非您的文档非常大。

于 2012-07-25T12:05:51.740 回答