我一开始对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