节点之间的第二度相互关系使用cypher

时间:2015-04-21 10:56:18

标签: neo4j cypher graph-databases

我有一个问题,我正在尝试解决查询,我创建了这个查询,我得到了结果,但我不确定它是否正确。请看看,如果有什么不正确请告诉我。这个想法很简单。当从一个节点N开始,A和B调用N时,我想在第二度中看到只有一个调用b和b调用A.结果在count和collections中。请看下面提到的查询。(Inter-Relationships是'q')

START n=node(12742)
MATCH p=(a)-[:CALLS]-(n)-[:CALLS]-(b)
OPTIONAL MATCH q=(a)-[:CALLS*0..2]->(b),(b)-[:CALLS*0..2]->(a) 
RETURN
  DISTINCT a.num ,
  COUNT(DISTINCT b.num) AS Total_B_numbers,
  Collect(b.num) AS bSideNumber,
  count(DISTINCT q) AS Com_Rel,
  count(DISTINCT p) AS Normal_Rel
ORDER BY Com_Rel;

提前致谢

1 个答案:

答案 0 :(得分:0)

你有什么样的错误/问题?我有一些反馈意见:

我想你可能想尝试从1长度开始的可变长度路径。 0的长度意味着它可以引用自身。这将是:

OPTIONAL MATCH q=(a)-[:CALLS*1..2]->(b),(b)-[:CALLS*1..2]->(a)

此外,这不是您的问题,但您应该养成不使用START的习惯,因为最终会从Neo4j中删除该语法。这将使你的前两行:

MATCH p=(a)-[:CALLS]-(n)-[:CALLS]-(b)
WHERE ID(n) = 12742

另外要注意使用内部Neo4j ID作为长期标识符(不是说你在这里做了什么,但是在未来的版本中,节点的ID可能会因为性能而改变)