我正在使用Neo4J构建Maven依赖图。我需要支持的一个查询是查找依赖于特定依赖项的所有节点。因此,如果C依赖于B和A,并且B依赖于A,findByDependency(A)
应该返回B和C.我使用以下查询实现了它,并且它正在工作:
MATCH (v1)-[:DEPENDS_ON]->(v2)
WHERE EXISTS (v1.gav) AND v2.gav = "A"
RETURN DISTINCT v1.gav
然而,在我上面的例子中,除了依赖于A之外,C还依赖于B.我希望对结果集进行排序,使B在C之前出现。我可以在代码中执行此操作,但是有一个使用Cypher的方法吗?
答案 0 :(得分:1)
如果我理解正确,那么你需要计算节点的相互依赖性:
MATCH (v1)-[:DEPENDS_ON]->(v2 {gav: 'A'}) WHERE EXISTS(v1.gav)
OPTIONAL MATCH (v1)<-[:DEPENDS_ON]-(v3)-[:DEPENDS_ON]->(v2) WHERE EXISTS(v3.gav)
WITH DISTINCT v1.gav AS gav,
COUNT(v3) AS sortValue
RETURN gav
ORDER BY sortValue DESC
更新:另一种方式:
MATCH p = (v1)-[:DEPENDS_ON*1..2]->(v2 {gav: 'A'})
WHERE ALL(n IN NODES(p)[0..-1] WHERE EXISTS(n.gav))
WITH DISTINCT v1.gav AS gav,
SUM(LENGTH(p)) AS sortValue
RETURN gav
ORDER BY sortValue ASC