因此,我的查询是一个“超级路径查找问题”。
这里的相关节点是;
路由:整体路径对象
tlroutesegment:路由和不同段(构成完整路径的部分)之间的逻辑链接(ps:我知道这可以用关系更好地表示,但是数据库只是这样:S)
oms:物理路径段本身
验证路径:与此问题或多或少无关的;路由的顶级实体
接下来是我遇到的实际问题;下面是解决上述问题的有效解决方案,但是,我希望通过减少我们必须在这里搜索的第4行路线的#来优化查询。
MATCH (vp:validochpath {"some ID HERE"})-->(ort:route)<--
(rs:tlroutesegment)-->(oms:oms)
WITH collect(oms) AS omsNodes
MATCH (ort:route)
WHERE ALL(x in omsNodes WHERE (ort)<--(:tlroutesegment)-->(x))
WITH ort
MATCH (ort)--(vp:validochpath)
RETURN *这就是新的查询的样子,正如您所看到的,我使用这个关系过滤掉了很多路由节点。
MATCH (vp:validochpath {onepID:"some ID HERE"})-->(ort:route)<--
(rs:tlroutesegment)-->(oms:oms)<--(rs2:tlroutesegment)
WITH rs2, collect(oms) AS omsNodes
MATCH (rs2)-->(ort2:route)
WHERE ALL(x in omsNodes WHERE (x)<--(:tlroutesegment)-->(ort2))
MATCH (ort2)--(vp:validochpath)
RETURN *问题是,这个查询似乎没有过滤掉所有节点的WHERE,只返回所有的内容。
发布于 2018-07-26 19:40:35
在第二个查询中,WHERE子句接受所有匹配。
从第一个MATCH子句中,我们知道rs2是一个tlroutesegment,omsNodes中的所有节点都与rs2相关。从第二个MATCH子句中,我们也知道ort2与rs2有关。WHERE子句检查omsNodes中的所有节点是否与与ort2相关的tlroutesegment相关。因为rs2是一个tlroutesegment,所以这个测试总是成功的。
如果要使用与tlroutesegment节点不同的rs2节点测试路径的存在性,请尝试以下WHERE子句:
WHERE ALL(x in omsNodes WHERE
SIZE([(x)<--(y:tlroutesegment)-->(ort2) WHERE y <> rs2 | y]) > 0)https://stackoverflow.com/questions/51541813
复制相似问题