【发布时间】:2021-07-15 11:00:09
【问题描述】:
我知道在密码中可以匹配这样的路径:
MATCH p=(n)-[r]-(m)
RETURN p
但是有没有办法做类似的事情,但对于子图,即不能以路径形式表达的节点和关系组?
我有这样的想法:
MATCH subgraph=[(n)-[r]-(m)-[s]-(p), (m)-[j]-(u)]
RETURN subgraph
【问题讨论】:
我知道在密码中可以匹配这样的路径:
MATCH p=(n)-[r]-(m)
RETURN p
但是有没有办法做类似的事情,但对于子图,即不能以路径形式表达的节点和关系组?
我有这样的想法:
MATCH subgraph=[(n)-[r]-(m)-[s]-(p), (m)-[j]-(u)]
RETURN subgraph
【问题讨论】:
也许APOC path expander 程序可以满足您的需求。您可以很好地控制图表的遍历方式。
但是,您不会像您想象的那样将子图放入一个变量中:
CALL apoc.path.expandConfig(n, { ... }) YIELD path 将返回多行(每个找到的路径一行)。
CALL apoc.path.subgraphAll(n, { ... }) YIELD nodes, relationships 将返回所有找到的节点和关系的列表。
【讨论】:
MATCH path1=(n)-[r]-(m)-[s]-(p),
path2=(m)-[j]-(u)
RETURN apoc.coll.toSet(nodes(path1),nodes(path2)) AS subGraphNodes,
apoc.coll.toSet(rels(path1),rels(path2)) AS subGraphRelationships
将为每个匹配的子图返回不同的节点和 rel。
如果只需要虚拟子图,可以使用
apoc.graph.fromPaths()
【讨论】: