我有一个问题,我正在尝试解决查询,我创建了这个查询,我得到了结果,但我不确定它是否正确。请看看,如果有什么不正确请告诉我。这个想法很简单。当从一个节点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;
提前致谢
答案 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可能会因为性能而改变)