Neo4j APOC 初识

前一段时间有个朋友提了个问题,A和B是朋友关系,经过算法发现,A和C也是朋友关系,在cypher中怎么用A和B的关系来表示A和C的关系。

1
2
3
4
5
6
// 旧版本的语句
start n1=node(1), n2=node(1725535), n3=node(1725534)
match (n1)-[r]->(n2)
with n1 ,n2, n3, type(r) as rt
create (n1)-[:rt]->(n3)
return n1, n2, n3;

自己测试了半天发现没有办法,Cypher里定义关系时,不支持动态参数。

后来查了半天资料,发现可以用Neo4j APOC解决

最后发现有两种方式可以解决:

  1. 用Neo4j APOC,使用apoc.cypher.run可以动态构造cypher 或者 apoc.create.relationship
  2. 把一条语句拆分成两条,在第二条语句里动态拼CQL(可能会有CQL注入的风险)

References

[1] neo4j-apoc github地址
[2] neo4j apoc 官方介绍
[3] apoc各个版本jar
[4] procedures-gallery
[5] APOC,Neo4j的开发者宝藏
[6] neo4j中文社区apoc