Neo4j 密码查询以确保所有节点都在路径中,但其他路径可以存在

Neo4j 密码查询以确保所有节点都在路径中,但其他路径可以存在,neo4j,cypher,Neo4j,Cypher,我有一个图表,但需要确保所有节点都在路径中(但路径中可能存在的节点数量可能超过这些节点) 下面是一个例子(对不起,我不得不删掉一些内容): 当我传入的列表中的所有三个中间节点中都有相同属性的值时,我希望查找end2而不是end1。但我无法获得返回end2而不返回end1的查询。可能会有更多的节点具有相同的路由,但我将只在中间节点之间不重复的不同值中进行每次传递。有谁知道这样一个查询,它只会给我一个包含中间节点所有值的结束节点?还有一些节点挂在这些端点节点上,其中一些节点在end1和end2之间

我有一个图表,但需要确保所有节点都在路径中(但路径中可能存在的节点数量可能超过这些节点)

下面是一个例子(对不起,我不得不删掉一些内容):

当我传入的列表中的所有三个中间节点中都有相同属性的值时,我希望查找end2而不是end1。但我无法获得返回end2而不返回end1的查询。可能会有更多的节点具有相同的路由,但我将只在中间节点之间不重复的不同值中进行每次传递。有谁知道这样一个查询,它只会给我一个包含中间节点所有值的结束节点?还有一些节点挂在这些端点节点上,其中一些节点在end1和end2之间互连。其他一些没有,这些是我不想要的节点,但是因为在黄色和蓝色之间有一条路径到该端点1,我不能使用任何路径,但是因为有其他路径到那些相同的节点(未显示),我也不能全部使用

提前谢谢你的帮助

[更新] 这里是我使用的当前查询,但它只允许每个开始节点有一个“结束”节点,我需要多个。我需要传入id(eg)={eg_id},但这将其限制为1。我宁愿使用下面的路径中的每一个都需要匹配中间节点中的名称属性列表必须到达哪一个结束节点。所以如果黄色和蓝色在那里,那么end1和end2会回来,但是如果黄色、蓝色和紫色在那里,那么只有end2会回来

start td = node({td_id}) 
match (td:Start)-[:Rel1]->(a)<-[:Rel2]-(eg:End)-[es:Rel3]->(n:WhatsPastEnd) 
with collect(a.name) as pnl, n, td, eg, es 
where id(eg) = {eg_id} 
and all(param_needs in {param_name_list} where param_needs in pnl) 
return n 
order by es.order
start td=node({td\u id})
匹配(td:Start)-[:Rel1]->(a)(n:WhatsPastEnd)
使用collect(a.name)作为pnl、n、td、eg、es
其中id(eg)={eg_id}
和all(param_需要在{param_name_list}中,其中param_需要在pnl中)
返回n
按顺序
[已解决]


非常感谢InverseFalcon,从下面的解决方案中得到了我所需要的

好的,让我们修改您的查询,并删除endnode id的匹配项

start td = node({td_id}) 
// unwind your list of names so every row has a name
with td, {param_name_list} as param_names
unwind param_names as param_name
match (td:Start)-[:Rel1]->(a)
where a.name = param_name
// now a has all nodes with the required names
// collect then unwind so we have the full collection for each a
with collect(a) as requiredNodes
unwind requiredNodes as a
match (a)<-[:Rel2]-(eg:End)
where all(node in requiredNodes where (node)<-[:Rel2]-(eg))
with eg
match (eg)-[es:Rel3]->(n:WhatsPastEnd) 
return n 
order by es.order
start td=node({td\u id})
//展开名称列表,使每一行都有一个名称
使用td,{param_name_list}作为param_名称
将参数名称作为参数名称展开
匹配(td:Start)-[:Rel1]->(a)
其中a.name=param_name
//现在,a具有具有所需名称的所有节点
//收集,然后放松,这样我们就有了每个a的完整收集
使用collect(a)作为所需节点
将requiredNodes作为

匹配(a)您是否可以编辑您的描述以提供到目前为止您一直在尝试的查询?另外,如果您可以提供节点标签以及有关从开始到结束节点的路径的其他信息,包括允许在开始和结束节点之间遍历的关系类型,还有关于路径长度限制的信息吗?如果有人可以查看一下,请更新描述您使用的是哪个版本的Neo4j?