在cypher查询中防止多次收集的重复-哪个是更规范的方法?

  • 本文关键字:方法 查询 cypher neo4j cypher
  • 更新时间 :
  • 英文 :


我一开始对cypher返回多个collect语句的叉积感到措手不及。

删除返回值中的重复项;在下面两个示例中,哪个是更规范(或更受欢迎)的方法:

选项:

MATCH (a)
MATCH (a)-->(b)
WITH a, collect(b) as bs
MATCH (a)-->(c)
RETURN a, bs, collect(c) as cs

选项B:

MATCH (a)
MATCH
(a)-->(b),
(a)-->(c)
RETURN
a,
collect(DISTINCT b) as bs,
collect(DISTINCT c) as cs

我假设选项A的性能更好。

由于您的两个结构仅在完整模式

时返回结果
(b)<--(a)-->(c) 

存在,则最短路径为

MATCH (b)<--(a)-->(c)
RETURN
a,
collect(DISTINCT b) as bs,
collect(DISTINCT c) as cs

如果两条边中的一条或两条边都是可选的,并且您可以使用apoc,您还可以这样做:

MATCH (a)
RETURN
a,
apoc.coll.toSet([(a)-->(b) | b]) as bs,
apoc.coll.toSet([(a)-->(c) | b]) as cs

最新更新