orientdb - MATCH 命令,在 WHILE 中使用 $currentMatch 来停止遍历
问题描述
我想使用匹配遍历图,但是当某个节点未连接到另一个特定节点时停止遍历。
为了澄清,我有以下设置:
我的目标是执行以下查询:
对于墙,请给我该墙的所有链接/深层属性,这些属性是与墙相同的提交的一部分,但前提是从属性到墙的完整路径是提交的一部分
这意味着,从提交 #21:0 开始,我进入墙 #30:0,为此我应该获得 0 个属性(请注意,属性 #34:0 未链接到提交 #21:0!),同时开始从提交 #22:0 开始,将转到墙 #29:0,为此我应该获得所有 4 个属性。基本上我想在MATCH
命中未连接到指定提交节点的节点时停止遍历。
我尝试了一个MATCH
命令,while
其中我检查是否有shortestPath
从提交到$currentMatch
. 但是,这似乎不起作用,我收到 Vertex 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")
但是使用遍历查询而不是 MATCH 有缺点吗?
解决方案
推荐阅读
- laravel - 在 laravel 中添加验证规则
- tensorflow - 如何在 colab 中降级 Keras?“NotFoundError:没有算法有效!”
- javascript - 从字符串转换为 ISODate Javascript 时如何防止时间戳发生变化?
- python - 如何根据 Datetimeindex 在 Pandas 数据框中按月重新采样
- javascript - 如何以 php 形式存储tiptap 编辑器数据?
- matlab - 使用第二个 yaxis 更改绘图顺序
- python - 如何在示例中使用 pytest bdd 为场景语句传递相同参数的不同值
- android - ExposedDropdownMenu 的 DropdownList 不更新
- google-bigquery - 在 Bigquery 中,如何将结构的字符串化数组转换为正确的数组?
- microsoft-graph-api - 如何在图形查询中引用冒号