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

时间:2016-03-13 10:52:45

标签: database orientdb graph-databases

我从State扩展了V个课程,将State的记录与E连接到图表中。我也有变量rid:$current。如何从State中选择其他传出$current并使用WHERE过滤它们?

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

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

2 个答案:

答案 0 :(得分:2)

这是怎么回事?

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

修改

这是我的示例数据  data

使用上一个查询我得到的结果对我来说听起来有些不对劲  query1

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

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

导致:  query2

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

答案 1 :(得分:2)

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

这是我的图表

enter image description here

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

enter image description here

节点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'] 你会得到输出中连接的状态为b,d,c和e的“a”和“b”。

如果您想在不使用“遍历”的情况下执行此操作,可以使用

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']

enter image description here

希望它有所帮助。