簡體   English   中英

OrientDB使用圖進行查詢分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM