OrientDB 使用图形按查询分组

OrientDB group by query using graph

我需要对某个 class 的 属性 个顶点执行分组聚合,但是按字段分组是距我当前节点两步的顶点,我不能让它发挥作用。

我的情况: 顶点 A 包含我想要聚合的 属性 并且有 n 个带有标签 references 的顶点。我要分组的顶点是这些顶点中的任何一个(B、C 或 D)如果该顶点有 defined by 到顶点 F 的边。

A ----references--> B --defined by--> E
  \---references--> C --defined by--> F
   \--references--> D --defined by--> G
     ...

我认为可行的查询是:

select sum(property), groupOn from (
    select property, out('references')[out('definedBy').@rid = F] as groupOn from AClass
) group by groupOn

但它不起作用,内部语句给了我一个不正确的奇怪响应(returns 没有顶点),我怀疑括号条件不支持 out().@rid 的原因是我发现的文档指出只支持“=”。

out('references')[out('definedBy') contains F] 也不起作用,returns out('definedBy') 用于 $current 顶点)。

有人知道如何实现吗?在我的示例中,我想要的结果是一列中的 属性 和另一列中 C 顶点的 @rid。然后我就可以愉快的进行我的分组聚合了

解决了!在 OrientDB 2.1(我正在尝试 rc4)中,有一个名为 UNWIND 的新子句(请参阅文档中的 SELECT)。

使用 UNWIND 我可以做到:

SELECT sum(property), groupOn from (
  SELECT property, out('references') as groupOn
  FROM AClass
  UNWIND groupOn
) WHERE groupOn.out('definedBy')=F
GROUP BY groupOn

根据 AClass 及其引用的顶点数量,它可能是一个缓慢的函数,如果我发现任何性能问题,我会报告。