OrientDB组通过查询使用图表

时间:2015-06-23 14:55:02

标签: sql group-by aggregate orientdb

我需要在某个类的顶点属性上执行分组聚合,但是按字段分组是距离当前节点两步的顶点,我无法使其工作。

我的案例: 顶点A包含我想要聚合的属性,并且具有带有标签references n 个顶点数。我想要分组的顶点是那些顶点(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

但它不起作用,内部语句给了我一个奇怪的响应,这是不正确的(不返回任何顶点)我怀疑out()不支持括号条件(.@rid的原因{ {1}}我发现的文档声明只支持“=”。

out('references')[out('definedBy') contains F]也不起作用,返回out('definedBy')顶点的$current

任何有想法如何实现这一目标的人?在我的例子中,我想要的结果是一列中的属性和另一列中的C顶点的@rid。然后我可以愉快地通过聚合来执行我的小组。

1 个答案:

答案 0 :(得分:1)

解决了!在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及其引用的顶点数量,它可能是一个缓慢的函数,如果我发现任何性能问题,我会报告。

相关问题