orientdb - 如何在不遍历的情况下过滤子顶点

orientdb - How to filter child vertexes without traverse

我有 class StateV 扩展而来,State 的记录与 E 连接成图表。我还有带 rid 的变量:$current。如何从 $current select 其他传出 State 并使用 WHERE?

过滤它们

我知道如何使用 TRAVERSE 实现,但是没有它是否可以实现?

SELECT EXPAND(out()) FROM (TRAVERSE out() FROM $current MAXDEPTH 1) WHERE out().keys IN ['a', 'b', 'c']

这个呢?

select expand(out()) from $current where out().keys IN ['a', 'b', 'c']

编辑

通过前面的查询,我得到了这些对我来说听起来有点不正确的结果


而不是我写的这个看起来更正确:

select from (select expand(out()) from $current) where keys IN ['a', 'b', 'c']

如果这对您有帮助,请告诉我。伊万

我试过这个与@Ivan Mainetti 非常相似的例子

这是我的图表

根据你的查询我得到了这个结果

节点12:0是键为"a"的节点

使用 TRAVERSE out() FROM 12:0 MAXDEPTH 1 你得到状态 "a","b","d"

select FROM (TRAVERSE out() FROM 12:0 MAXDEPTH 1) WHERE out().keys IN ['a', 'b', 'c']

您将从状态 'a'、'b'、'd' 开始,这些状态在输出中至少与以下状态之一相连 'a' , 'b' 和 'c'。 您将获得连接到 "b" 的状态 "a" 和连接到 "c".

的状态 "b"

select expand(out())FROM (TRAVERSE out() FROM 12:0 MAXDEPTH 1) WHERE out().keys IN ['a', 'b', 'c'] 您将在输出中获得连接到 "a" 和 "b" 的状态,即 b、d、c 和 e。

如果你想在不使用 "traverse" 的情况下执行此操作,你可以使用

select expand(out()) from (
select expand($c)
let $a=(select from 12:0),
    $b=(select expand(out()) from $a),
    $c=unionAll($a,$b)
) where out().keys IN ['a', 'b', 'c']

希望对您有所帮助。