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 - Fatal编程技术网

Neo4j 密码路径需要排除某种关系

Neo4j 密码路径需要排除某种关系,neo4j,Neo4j,我有这个图表: A-[:X]->B-> a whole tree of badness A-[:Y]->C-> a whole tree of goodness 我想知道如何指定一个以a开头的路径,该路径不包括:X关系 在这种情况下,“Y”可以是多种不同边类型中的任意一种。我不想明确地指定它们 如何编写包含a-[*]-B的path语句,其中*不是:X,但可以是其他任何内容?a和B之间固定数量关系的解决方案 您可以通过将所有关系从a匹配到B来排除关系类型,然后使用筛选出特

我有这个图表:

A-[:X]->B-> a whole tree of badness
A-[:Y]->C-> a whole tree of goodness
我想知道如何指定一个以a开头的路径,该路径不包括:X关系

在这种情况下,“Y”可以是多种不同边类型中的任意一种。我不想明确地指定它们

如何编写包含a-[*]-B的path语句,其中*不是:X,但可以是其他任何内容?

a和B之间固定数量关系的解决方案 您可以通过将所有关系从
a
匹配到
B
来排除关系类型,然后使用
筛选出特定类型,其中不包括

MATCH p = (a:Label1)-[]-(b:Label2)
WHERE NOT (a)-[:X]-(b)
RETURN p
a和B之间可变长度路径的解决方案 如果在
a
B
之间有一个长度可变的路径,则不能将确切的模式放入
中不
的位置。相反,您可以在路径上使用
NONE
谓词:

MATCH p = (a:Label1)-[*]-(b:Label2)
// this WHERE makes sure that none of the relationships in the
// returned path fulfill the criterion type(relationship) = 'X'
WHERE NONE (r in relationships(p) WHERE type(r) = 'X')
RETURN p

此Cypher查询比@MartinPreusse的可变长度路径查询更简单,因为它避免使用
关系
函数。显示它的执行计划也稍微简单一点,因此可能会更快

MATCH p=(a:Label1)-[rels*]-(b:Label2)
WHERE NONE (r IN rels WHERE type(r)= 'X')
RETURN p

我将为他的用例添加ALL谓词,其中路径不是深度1@ChristopheWillemsen你的意思是像
,其中关系(p)中没有(r),其中类型(r)='Y')
?这不起作用。我遇到了一个困难的情况,唯一的解决方案是使用:
MATCH p=(a:Label1)-[*]-(b:Label2),其中NONE(关系中的r(p)其中type(r)='X')返回p
您能提供显示问题的示例数据吗
rels
p
中所有关系的列表,因此应该与
关系(p)
相同。不幸的是,我不能提供。我知道这听起来很疯狂,因为我在我们的生产数据库上测试了它,但它不起作用。但是,在默认的电影数据库上,它确实起作用了!您使用的是最新的neo4j版本吗?可能是一个固定的错误。否则,您可能需要提交。我们使用的是3.3.5,所以不是最新版本?我会确保升级到最新版本。说得好,谢谢!