2017-05-06 81 views
0

我想查詢/遍歷一個orientDB圖,並且無法弄清楚如何在遍歷期間進行過濾。遍歷圖和過濾

OTraverse traverse = txGraph.traverse(); 
     traverse.setMaxDepth(3); 
     for(OIdentifiable obj : traverse.fields("in_friend","in","out","out_friend").target(new ORecordId("#15:8")).predicate(new OCommandPredicate(){ 

      public Object evaluate(OIdentifiable iRecord, ODocument arg1, OCommandContext arg0) { 
       Vertex v = txGraph.getVertex(iRecord.getIdentity()); 
       if (iRecord.getClass().equals("person") || (v.getProperty("test")!= null && v.getProperty("test").toString().equals("continue"))){ 

        log.println(v.getProperty("test").toString()); 
        return true; 
       } 

       return false; 
      } 

該代碼在節點#15:8(一個人)開始遍歷,並沿着所有類型爲「朋友」的邊。我不完全相信我正在做這件事,但結果看起來是正確的(直到我包括謂詞函數)

我現在想要做的是,只跟隨那些類型爲「朋友」的邊和與具有值「繼續」的屬性「測試」

在此處的代碼中使用謂詞將在遇到任何不符合條件的Vertex或Edge時立即停止遍歷。

有沒有辦法讓它不遵循那些特定的邊,而是繼續沿着其他邊搜索圖? ETA:我試圖用Java來做到這一點,並且更喜歡這種方式;我很開放,被告知爲什麼我不應該,強硬。

回答

0

有幾個問題在這裏:

  1. 你不知道,目前iRecord是一個頂點(也可能是邊緣),所以下面沒有多大意義:

    Vertex v = txGraph.getVertex(iRecord.getIdentity()); 
    
  2. 您正在檢查.getClass(),但它返回的是iRecord的Java類,它可能只是ODocument。嘗試更改您的代碼,如下所示:

    ODocument doc = iRecord.getRecord(); 
    String className = doc.getSchemaClass().getName(); 
    Object prop = doc.field("test"); 
    if (className.equalsIgnoreCase("person") || (prop != null && prop.toString().equals("continue"))){ 
        return true; 
    }