我想使用match遍历一个图,但是当某个节点没有连接到另一个特定节点时,停止遍历。
为了澄清,我有以下设置:
我的目标是执行以下查询:
对于一个墙,给出与墙相同的墙的所有链接/深度属性,但前提是从属性到墙壁的完整路径是提交的一部分。
这意味着,从提交#21:0开始,我转到墙#30:0,为此我应该获得0属性(请注意,属性#34:0没有链接到提交#21:0!),而从提交#22:0开始,将转到墙#29:0,为此我应该获得所有4个属性。基本上,我想在未连接到指定提交节点的节点被击中时停止MATCH的遍历。
我尝试了一个MATCH命令,其中使用了一个while,在该命令中,我检查提交到$currentMatch时是否存在shortestPath。但是,这似乎不起作用,我得到的错误是顶点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)..。但是请注意,此查询会给出“顶点id不能为空”的错误。
我似乎误解了$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")但是使用遍历查询而不是匹配有缺点吗?
发布于 2018-05-24 18:06:56
我不知道我是否得到了您想要的,但是我理解的是,您的查询应该返回所有直接连接到提交顶点的属性,其中没有墙,对吗?
如果这是你想要的,试试这个:
MATCH {class: Property, as: props}.in("commitlink"){as: commit, where:(@rid = #19:0)} return props这是我的模式:

其结果是:

呼呼它有帮助
问候
https://stackoverflow.com/questions/50502900
复制相似问题