假设我已经匹配了一个起始节点,现在有了它的id。
接下来,我想查找到具有特定标签的起始节点的传入路径的所有节点。我不知道"遥远的"具有该标签的节点是(但认为它们将少于20个节点)。如果是任何带有该标签的相关节点,那么它们距离都相同。
目前我正在做:
MATCH (l:`mylabel`)-[*1..20]->(start) where id(start) = 1016236 RETURN l
但我猜这可能是浪费,低效和缓慢。
我可以做类似的事(在伪代码中):
for $i in (1..20) {
@ls = run_cypher("MATCH (l:`mylabel`)-[*1..$i]->(start) where id(start) = 1016236 RETURN l")
last if @ls
}
但这需要多个单独的查询,但仍然很浪费。
有更好的解决方案吗?
答案 0 :(得分:0)
如果它们都在同一深度,您可以使用LIMIT 1
进行查询,然后在该深度进行查询:
MATCH path=shortestPath((l:`mylabel`)-[*1..20]->(start))
WHERE id(start) = 1016236
RETURN min(length(rels(path))) AS min_depth
然后您可以使用该深度进行查询:
MATCH path=(l:`mylabel`)-[*$i..$i]->(start)
WHERE id(start) = 1016236
RETURN l
我很想知道这是否表现更好。老实说,因为Neo4j针对图形遍历进行了优化,它可能没有太大的区别,但它取决于你的图形。它现在的表现如何?