neo4j 如何获取一组节点之间的所有关系?

jqjz2hbq  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(264)

一般来说,问题是:存在具有节点的(可变长度)匹配的查询:

MATCH (a:`SOME.LABEL.1` {...})
MATCH (b:`SOME.LABEL.2` {...})
MATCH (c:`SOME.LABEL.3` {...})
...
MATCH (z:`SOME.LABEL.n` {...})

我需要得到这组节点之间的所有关系,我开始考虑搜索(a,b,c,...,z)的不同组合:

WITH a,b,c, ..., z

MATCH (a) -[ab]-> (b)
MATCH (a) -[ac]-> (c)
...
MATCH (z) -[za]-> (a)

RETURN ab, ac, ..., za;

但是我觉得太复杂了。
有一个apoc函数-apoc.algo.cover,它可以满足我的需要,但不幸的是,我需要使用纯密码来完成它。

w46czmvw

w46czmvw1#

这将工作:

WITH ['LAB1', 'LAB2', 'LAB3', 'LAB4'] AS labs
MATCH (n)-[r]->(m)
WHERE
  ANY(l1 IN labs WHERE l1 IN LABELS(n)) AND
  ANY(l2 IN labs WHERE l2 IN LABELS(m))
RETURN r

但是如果您使用的是neo4j 5,更新的标签表达式语法可能会更好:

MATCH (:LAB1|LAB2|LAB3|LAB4)-[r]->(:LAB1|LAB2|LAB3|LAB4)
RETURN r

相关问题