Neo4j 交叉路口

Neo4j 交叉路口,neo4j,cypher,Neo4j,Cypher,具有以下模式: (A{id})-[:C]>(B) 我需要: (A{id:1})∩ (A{id:2})∩ (A{id:3})=>G1 (A{id:4})∩ (A{id:5})∩ (A{id:6})=>G2 G1∩ G2 第三步不是问题,但我在第1步和第2步遇到了问题,因为组可以由最多30个类型为a和的元素组成 MATCH (v:A{id: 1})-[:C]->(b:B)<-[:C]-(as:A) WHERE as.id in [1,2,3] RETURN count(distinct

具有以下模式:

(A{id})-[:C]>(B)

我需要:

  • (A{id:1})∩ (A{id:2})∩ (A{id:3})=>G1
  • (A{id:4})∩ (A{id:5})∩ (A{id:6})=>G2
  • G1∩ G2
  • 第三步不是问题,但我在第1步和第2步遇到了问题,因为组可以由最多30个类型为a和的元素组成

    MATCH (v:A{id: 1})-[:C]->(b:B)<-[:C]-(as:A) 
    WHERE as.id in [1,2,3]
    RETURN count(distinct b)
    

    MATCH(v:A{id:1})-[:C]>(b:b)您可能想在上查看这篇neo4j知识库文章

    本文中有几种方法可以做到这一点。将第一种方法应用于您的问题,这将为您提供集合中所有:A节点均可访问的: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
    

    我不太明白上面1和2中的操作与下面引用的查询之间的关系。另外,如果id是:a节点的唯一标识符,那么
    count(distinct v)
    将始终为1。你能详细说明一下你希望查询做什么吗?对不起,发布了错误的查询。我希望现在它更清楚了。基本上,从相交处获得两个集合,第三步是相交这些集合