[英]OrientDB group by query using graph
我需要在某個類的頂點的屬性上執行分組聚合,但是group by字段是一個離當前節點兩步的頂點,因此我無法使其工作。
number of vertices with label references
. 我的情況 :頂點A包含我要在其上聚合的屬性,並且具有個帶有標簽references
的頂點。 我要分組的頂點是那些頂點(由B,C或D組成)中的任何一個( 如果該頂點具有defined by
頂點F defined by
邊) 。
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
的原因是我發現的文檔指出僅支持“ =”。
out('references')[out('definedBy') contains F]
也不起作用,返回$current
頂點的out('definedBy')
)。
有人知道如何實現這一目標嗎? 在我的示例中,我想要的結果是一列中的屬性,而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的頂點數及其引用,它可能是一個緩慢的函數,如果發現任何性能問題,我會報告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.