我需要在某个类的顶点属性上执行分组聚合,但是按字段分组是距离当前节点两步的顶点,我无法使其工作。
我的案例:
顶点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。然后我可以愉快地通过聚合来执行我的小组。
答案 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及其引用的顶点数量,它可能是一个缓慢的函数,如果我发现任何性能问题,我会报告。