拥有以下架构:
(A {id})-[:C]->(B)
我需要:
第三步不是问题,但我遇到了第1步和第2步的问题,因为这些组最多可以由A类的30个元素构成,并且
MATCH (v:A{id: 1})-[:C]->(b:B)<-[:C]-(as:A)
WHERE as.id in [1,2,3]
RETURN count(distinct b)
生成联合而不是交集。可以用一个查询来解决这个问题吗?
编辑:在第一步,我保存G1上第一个交叉点的结果和G2上第二个交叉点的结果。第三步使用这两组数据
答案 0 :(得分:1)
您可以查看performing match intersection上的这篇neo4j知识库文章。
在文章中有几种方法可以做到这一点。将第一种方法应用于您的问题,这将为您提供以下所有的可达的B节点:集合中的节点:
WITH [1,2,3] as ids
MATCH (a:A)-[:C]->(b:B)
WHERE a.id in ids
WITH b, size(ids) as inputCnt, count(DISTINCT a) as cnt
WHERE cnt = inputCnt
RETURN b