如何解决neo4j如何从选定的起始节点返回所有路径
我的愿望是从选定的节点开始检索通过r
关系连接的所有节点。例如
如果我选择a
,则希望有两行作为响应:
a,b,c
a,d
如果我选择b
,那么我期望一行:
b,c
我尝试了match p=(:a)-[:r*..]->() return p
,但返回了这个
在python中,我得到了我不知道如何解析的信息:
<Path start=<Node id=93 labels=frozenset({'a'}) properties={'name': 'A'}> end=<Node id=94 labels=frozenset({'b'}) properties={'name': 'B'}> size=1>
<Path start=<Node id=93 labels=frozenset({'a'}) properties={'name': 'A'}> end=<Node id=95 labels=frozenset({'c'}) properties={'name': 'C'}> size=2>
<Path start=<Node id=93 labels=frozenset({'a'}) properties={'name': 'A'}> end=<Node id=96 labels=frozenset({'d'}) properties={'name': 'D'}> size=1>
编辑:我发现了功能nodes(),所以我尝试使用match p=(:a)-[:r*..]->() return nodes(p)
返回了我所需的内容:
,但它仍复制a,c
和a,b
中的路径a,c
。如何删除第一行?
解决方法
关于重复路径的问题,一个技巧是排除末端节点不是叶子的路径,即存在从其开始的关系。例如:
MATCH p=(parent {name: "a"})-[:r*1..10]->(child)
WHERE NOT (child)-[:r]->()
RETURN p
对于第二个关于返回格式的问题,可以使用UNWIND
和collect
的组合,如下所示:
MATCH p=(parent {name: "a"})-[:r*1..10]->(child)
WHERE NOT (child)-[:r]->()
UNWIND nodes(p) as node
WITH p,collect(node.name) as names
RETURN names
结果是:
╒═════════════╕
│"names" │
╞═════════════╡
│["a","b","c"]│
├─────────────┤
│["a","d"] │
└─────────────┘
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。