2011-10-07 47 views
4

我使用圖數據庫Neo4J建模了有向樹結構。所以我有這樣的:http://ouwarovite.net/YAPC/220px-Binary_tree.svg.png(不是強制二進制)用Neo4J對有向樹進行泛型遍歷

我的數據庫的用戶可以隨意添加現有節點的子節點,所以樹的高度和單節點的程度是未知的。

現在,我想像這樣查詢我的樹:從節點x開始,給我留下所有離開x的後代。

這種查詢可以用Gremlin或Cypher執行嗎?如果是這樣,如何做到這一點,實現最大的性能? (我還沒有找到在'通用'樹上執行查詢的可能性,因爲你總是需要指定最大深度)

我知道,使用REST/JSON框架和JAVA API可以這樣做:

POST /db/data/node/51/traverse/node 
{ 
"return_filter" : 
    { 
    "body" : "position.endNode().hasProperty('leave')" , 
    "language" : "javascript" 
    }, 
"relationships" : [ { "type" : "_default", "direction" : "out" } ] , 
"prune_evaluator" : { "name" : "none" , "language" : "builtin" } 
} 

(我的葉子有屬性「假」,我邊沒有類型 - >所以_default)

有沒有更簡單/更好的方式來用更好的表現,也許這樣做嗎?

回答

4

Cypher支架可以看起來像:

start root=node({rootId}) 
match root-[*]->child 
where child.leave 
return child 

rootId作爲一個參數傳遞