Graph 用Neo4J遍历有向树

Graph 用Neo4J遍历有向树,graph,traversal,neo4j,tree-traversal,graph-databases,Graph,Traversal,Neo4j,Tree Traversal,Graph Databases,我使用图形数据库Neo4J建模了一个有向树结构。所以我有这样的东西:(不是强制性的二进制) 我的数据库的用户可以随意添加现有节点的子节点,因此树的高度和单个节点的程度是未知的 现在,我想像这样查询我的树:从节点x开始,给我所有叶子,它们都是叶子x的后代 这种查询可以用Gremlin或Cypher执行吗?如果可以,如何实现性能的最大化?(我没有发现在“通用”树上执行查询的可能性,因为您总是必须指定最大深度) 我知道,使用REST/JSON框架和JAVA API是可能的,如下所示: POST /db

我使用图形数据库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" }
}
(我的叶子有属性'leave',我的边没有类型->因此(默认)


是否有一种更简单/更好的方法可以做到这一点,或者性能更好?

Cypher可能会这样:

start root=node({rootId}) 
match root-[*]->child
where child.leave
return child
rootId
是要传入的参数