我想使用匹配遍历图形,但是当某个节点未连接到另一个特定节点时停止遍历。
为了澄清,我有以下设置:
我的目标是执行以下查询:
对于墙,请告诉我墙的所有链接/深层属性,这些属性属于与墙相同的提交,但前提是从属性到墙的完整路径是提交的一部分 < / p>
这意味着,从提交#21:0开始,我转到墙#30:0,我应该获得0属性(请注意,属性#34:0未链接到提交#21:0!) ,从提交#22:0开始,将转到墙#29:0,我应该获得所有4个属性。基本上我想在命中一个没有连接到指定提交节点的节点时停止遍历MATCH
。
我尝试了一个MATCH
命令,其中while
我在其中检查了shortestPath
的提交是否有$currentMatch
。但是,这似乎不起作用,我得到顶点ID不能为NULL的错误。
我的查询如下:
select expand(ret) from (
MATCH {class: V, as: commit, where:(@rid = #21:0)},
{as: commit}.out("commitlink"){as: wall, where:(@class INSTANCEOF "Wall")},
{as: wall}.out("E"){as: props, where:(@class = "Property"), while:(shortestPath($matched.commit, $currentMatch, "OUT","commitlink").size() > 0)}
return items as ret)
...但请注意,此查询会给出&#34;顶点ID不能为空&#34;错误。
我似乎误解了命令的$currentMatch
部分中while
的可用性。
编辑: 这似乎可以完成这项工作:
select expand($properties) LET
$commit = (SELECT FROM #22:0),
$wall = (SELECT FROM (SELECT expand(out("commitlink")) FROM $commit) WHERE
@class INSTANCEOF "Wall"),
$properties = (SELECT FROM (TRAVERSE OUT("E") FROM $wall WHILE (shortestPath($commit, @rid, "OUT", "commitlink").size() > 0)) WHERE @class INSTANCEOF "Property")
但是使用遍历查询而不是MATCH有缺点吗?