Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 分析依赖系统的密码查询_Neo4j_Cypher - Fatal编程技术网

Neo4j 分析依赖系统的密码查询

Neo4j 分析依赖系统的密码查询,neo4j,cypher,Neo4j,Cypher,我需要创建一个查询来分析包依赖关系图。 有不同类型的包(修补程序、featurepack、servicepack) 该图在节点深度方面可能非常复杂。 目前我尝试使用下面的查询,但它不起作用 START n = node(1501) // package A MATCH n-[:DEPENDS_ON*]->b WHERE NOT(b<-[:REPLACES*]-()) // an indirect dependency package is replaced. // so it

我需要创建一个查询来分析包依赖关系图。 有不同类型的包(修补程序、featurepack、servicepack)

该图在节点深度方面可能非常复杂。 目前我尝试使用下面的查询,但它不起作用

START n = node(1501) // package A
MATCH n-[:DEPENDS_ON*]->b
WHERE NOT(b<-[:REPLACES*]-())    // an indirect dependency package is replaced.
// so it has to be filtered but, the replacing package must be a dependency of A.
RETURN DISTINCT b, b.full_name, b.created?
ORDER BY b.created?
START n=node(1501)//包A
匹配n-[:取决于*]->b

WHERE NOT(b您可以将WHERE子句中的过滤条件更改为

WHERE NOT(b<-[:DEPENDS_ON*0..]-()<-[:REPLACES*]-()<-[:DEPENDS_ON*]-n) 

WHERE NOT(b我想我找到了一种更快的方法,在我的案例中效果很好

MATCH p-[DEPENDS_ON*]->()-[:REPLACES*]->()-[:DEPENDS_ON*0..]->r 
WITH p, collect(r) AS replaces 
MATCH p-[:DEPENDS_ON*]->d 
WHERE p.name = 'A' AND NOT (d IN replaces) 
RETURN DISTINCT d, d.name

@Lisa您的查询对我学习Cypher有很大帮助。再次感谢。

您好,感谢您的回答。实际上,它只返回了第一级包,而不是间接依赖于包。而且它花费了太多时间(约63000毫秒)。我可以看到性能很差,因为有太多可变长度路径模式。如果您事先知道一些长度,指定固定长度将提高性能。我不确定我是否理解仅获取直接依赖包的问题,因为它确实会返回示例的预期结果。我在此处创建了一个控制台,以便您可以ee查询和结果..也许您是通过在不同的数据集上应用查询来解决问题的?非常感谢您提供的伟大示例。实际上,我在将其应用于实际用例时遇到问题。我不明白是什么原因导致我的结果只包含一级包。您的查询工作正常,但我是我花时间验证数据库的结果。再次感谢。
MATCH p-[DEPENDS_ON*]->()-[:REPLACES*]->()-[:DEPENDS_ON*0..]->r 
WITH p, collect(r) AS replaces 
MATCH p-[:DEPENDS_ON*]->d 
WHERE p.name = 'A' AND NOT (d IN replaces) 
RETURN DISTINCT d, d.name