2017-05-03 77 views
0

鑑於此圖表: enter image description here 第三方可能或不擁有參數。orientdb停止遍歷一些條件

參數是通過一個上下文代碼(:CREATE VERTEX Parameter SET context='val1', code='val2', value='val3' EX)表示。 ThirdParty由類型表示(例如:CREATE VERTEX ThirdParty SET type=7

從頂點#40:0開始,我想檢索給定參數的值val2')連接到此節點(節點可以有不同的參數)。如果節點不擁有給定的參數,那麼我想逐個遍歷該節點的父節點,直到找到給定參數的值。

我嘗試使用此查詢:

SELECT parameter.value FROM (MATCH {class:ThirdParty, 
      where: (type = 7)}.in('parent_of') 
      {while: (out('owns').size() == 0), 
      where: (out('owns').size() > 0)}.out('owns') 
      {as: parameter} RETURN parameter) 

但問題是,一個ThirdPary可以有多個參數,用不同的背景代碼,我無法找到如何修改部分在查詢中與給定參數(context ='val1'和code ='val2')進行比較。

回答

1

查詢應該是這樣:

SELECT parameter.value FROM (
    MATCH 
     {class:ThirdParty, where: (type = 7)} 
     .in('parent_of') 
     { 
     while: (
      not (
      out('owns').context contains "val1" 
      AND 
      out('owns').code contains "val2" 
      ) 
     ), 
     where: (
      out('owns').context contains "val1" 
      AND 
      out('owns').code contains "val2" 
     ) 
     }.out('owns') 
     {as: parameter, where:(code = "val2" and context = "val1")} 
    RETURN parameter 
) 

  1. 你不能使用「上下文」爲屬性的名稱,因爲它是指查詢上下文,你會不會有你期待的結果

  2. 我在2.2.19上發現了一個破壞這個查詢的bug,我只是修復了它,並且把修復推到了2.2.x分支上。該修補程序將以2.2.20發佈。與此同時,在幾個小時內你會發現這裏的快照https://oss.sonatype.org/content/repositories/snapshots/com/orientechnologies/orientdb-community/2.2.20-SNAPSHOT/

+0

感謝Luigi的回答!你修正的錯誤與錯誤有關:'java.lang.UnsupportedOperationException:Implement SuffixIdentifier!'?因爲當我通過刪除部分out('owns')來執行查詢時,上下文包含來自'while'和'where'子句的「val1」AND',我得到'UnsupportedOperationException' – mabbas

+0

正是我所做的修復解決了這個問題 –

+0

我剛做了一個使用快照的測試,它工作得很好!我只需要將'where:(code =「val2」)''添加到'{as:parameter}'子句中,以檢索給定參數的值,否則查詢返回連接到節點的所有參數的值。感謝您的幫助!我昨天才開始研究orientdb,而且我已經是一個很棒的粉絲! :) – mabbas