Neo4j深层层次查询

Neo4j深层层次查询,neo4j,Neo4j,我在数据库中有这种数据模型: (a)<-[:has_parent]<-(b)-[:has_parent]-(c)<-[:has_parent]-(...) (a)首先,您需要知道如何查找根节点。下面的语句查找没有外部父关系的节点-请注意,在大型图中,该语句可能代价高昂 MATCH (n) WHERE NOT ((n)-[:has_parent]->()) RETURN n 相反,您应该使用索引来查找该节点: MATCH (n:Node {name:'abc'}) 从

我在数据库中有这种数据模型:

(a)<-[:has_parent]<-(b)-[:has_parent]-(c)<-[:has_parent]-(...)

(a)首先,您需要知道如何查找根节点。下面的语句查找没有外部父关系的节点-请注意,在大型图中,该语句可能代价高昂

MATCH (n)
WHERE NOT ((n)-[:has_parent]->())
RETURN n
相反,您应该使用索引来查找该节点:

MATCH (n:Node {name:'abc'})
从根节点开始,我们以可变深度遍历入站父关系。在遍历的每个节点上,我们计算子节点的数量-因为这可能是零,所以使用了一个
可选的匹配项

MATCH (root:Node) // line 1-3 to find root node, replace by index lookup
WHERE NOT ((root)-[:has_parent]->())
WITH root
MATCH p =(root)<-[:has_parent*]-()  // variable path length match
WITH last(nodes(p)) AS currentNode, length(p) AS currentDepth
OPTIONAL MATCH (currentNode)<-[:has_parent]-(c) // tranverse children
RETURN currentNode, currentNode.created, currentDepth, count(c) AS countChildren
MATCH(root:Node)//第1-3行查找根节点,替换为索引查找
其中不((根)-[:has_parent]->())
有根

匹配p=(根)请通过共享示例图。您的查询是从一个特定的根节点开始的吗?嘿@stefan Armburster,我已经在问题中添加了一个示例图嘿stefan,[a]查询可以从层次结构中的任何一点开始,而不仅仅是根节点[b]开始节点下的每个节点都会按其子节点的总数和距离(从返回的节点)进行排序每个后代的时间戳,每个后代的时间戳,我指的是它下面的一切,而不仅仅是它的直接子代。