Orientdb MATCH命令,在WHILE中使用$currentMatch停止遍历

Orientdb MATCH命令,在WHILE中使用$currentMatch停止遍历,orientdb,orientdb2.2,Orientdb,Orientdb2.2,我想使用match遍历一个图,但当某个节点未连接到另一个特定节点时,停止遍历 为了澄清,我有以下设置: 我的目标是执行以下查询: 对于墙,请为我提供该墙的所有链接/深度属性,这些属性与墙属于同一提交的一部分,但前提是从属性到墙的完整路径是提交的一部分 这意味着,从commit 21:0开始,我转到wall 30:0,对于它,我应该获得0属性注意,属性34:0未链接到commit 21:0!,从commit 22:0开始,将转到wall 29:0,我将获得所有4个属性。基本上,我希望在命中未连接到

我想使用match遍历一个图,但当某个节点未连接到另一个特定节点时,停止遍历

为了澄清,我有以下设置:

我的目标是执行以下查询:

对于墙,请为我提供该墙的所有链接/深度属性,这些属性与墙属于同一提交的一部分,但前提是从属性到墙的完整路径是提交的一部分

这意味着,从commit 21:0开始,我转到wall 30:0,对于它,我应该获得0属性注意,属性34:0未链接到commit 21:0!,从commit 22:0开始,将转到wall 29:0,我将获得所有4个属性。基本上,我希望在命中未连接到指定提交节点的节点时停止对匹配的遍历

我尝试了一个MATCH命令,并在其中检查从commit到$currentMatch是否有最短的路径。然而,这似乎不起作用,我得到一个错误,顶点ID不能为空

我的问题是:

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不能为null的错误

我似乎误解了命令while部分中$currentMatch的可用性

编辑: 这似乎起到了作用:

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 {class: Property, as: props}.in("commitlink"){as: commit, where:(@rid = #19:0)} return props
这是我的模式:

结果是:

有帮助吗


这不是我真正的意思。我更改了示例查询的文本。基本上,我希望所有连接的属性都来自一个墙,但只有那些从墙到属性的路径连接到和墙相同的提交。我尝试的是:从提交中选择墙->从墙遍历出同一提交中的属性->停止深度遍历如果属性不在提交中,则从墙继续其他部分