orientdb 在某些条件下停止遍历
orientdb stop traverse with some condition
给定这张图:
第三方可能拥有也可能不拥有参数。
参数由 context、code 和 value 表示(例如:CREATE VERTEX Parameter SET context='val1', code='val2', value='val3'
).
第三方由类型表示(例如:CREATE VERTEX ThirdParty SET type=7
)
从顶点 #40:0 开始,我想检索附加到此节点 (一个节点可以有不同的参数)。如果节点不拥有给定的参数,那么我想一个一个地遍历这个节点的父节点,直到找到给定参数的值。
我试过使用这个查询:
SELECT parameter.value FROM (MATCH {class:ThirdParty,
where: (type = 7)}.in('parent_of')
{while: (out('owns').size() == 0),
where: (out('owns').size() > 0)}.out('owns')
{as: parameter} RETURN parameter)
但问题是,一个 ThirdPary 可以有多个参数,具有不同的 context 和 code,我找不到如何修改查询中的 while 部分以与给定参数(上下文='val1' 和代码='val2')进行比较。
查询应该是这个:
SELECT parameter.value FROM (
MATCH
{class:ThirdParty, where: (type = 7)}
.in('parent_of')
{
while: (
not (
out('owns').context contains "val1"
AND
out('owns').code contains "val2"
)
),
where: (
out('owns').context contains "val1"
AND
out('owns').code contains "val2"
)
}.out('owns')
{as: parameter, where:(code = "val2" and context = "val1")}
RETURN parameter
)
但是
您不能使用 "context" 作为 属性 名称,因为它指的是查询上下文,您不会得到您期望的结果
我在 2.2.19 上发现了一个破坏此查询的错误,我刚刚修复它并将修复推送到 2.2.x 分支。该修复程序将随 2.2.20 一起发布。同时,几个小时后您会在此处找到快照 https://oss.sonatype.org/content/repositories/snapshots/com/orientechnologies/orientdb-community/2.2.20-SNAPSHOT/
给定这张图:
参数由 context、code 和 value 表示(例如:CREATE VERTEX Parameter SET context='val1', code='val2', value='val3'
).
第三方由类型表示(例如:CREATE VERTEX ThirdParty SET type=7
)
从顶点 #40:0 开始,我想检索附加到此节点 (一个节点可以有不同的参数)。如果节点不拥有给定的参数,那么我想一个一个地遍历这个节点的父节点,直到找到给定参数的值。
我试过使用这个查询:
SELECT parameter.value FROM (MATCH {class:ThirdParty,
where: (type = 7)}.in('parent_of')
{while: (out('owns').size() == 0),
where: (out('owns').size() > 0)}.out('owns')
{as: parameter} RETURN parameter)
但问题是,一个 ThirdPary 可以有多个参数,具有不同的 context 和 code,我找不到如何修改查询中的 while 部分以与给定参数(上下文='val1' 和代码='val2')进行比较。
查询应该是这个:
SELECT parameter.value FROM (
MATCH
{class:ThirdParty, where: (type = 7)}
.in('parent_of')
{
while: (
not (
out('owns').context contains "val1"
AND
out('owns').code contains "val2"
)
),
where: (
out('owns').context contains "val1"
AND
out('owns').code contains "val2"
)
}.out('owns')
{as: parameter, where:(code = "val2" and context = "val1")}
RETURN parameter
)
但是
您不能使用 "context" 作为 属性 名称,因为它指的是查询上下文,您不会得到您期望的结果
我在 2.2.19 上发现了一个破坏此查询的错误,我刚刚修复它并将修复推送到 2.2.x 分支。该修复程序将随 2.2.20 一起发布。同时,几个小时后您会在此处找到快照 https://oss.sonatype.org/content/repositories/snapshots/com/orientechnologies/orientdb-community/2.2.20-SNAPSHOT/