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