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

Database orientdb-如何在没有遍历的情况下过滤子顶点,database,orientdb,graph-databases,Database,Orientdb,Graph Databases,I从V扩展为类状态,将状态的记录连接到带有E的图形中。我还有一个rid变量:$current。如何从$current中选择其他传出状态,并使用WHERE对其进行过滤 我知道如何使用遍历实现if,但不使用它是否可以实现if SELECT EXPAND(out()) FROM (TRAVERSE out() FROM $current MAXDEPTH 1) WHERE out().keys IN ['a', 'b', 'c'] 这个怎么样 select expand(out()) from $c

I从
V
扩展为
状态
,将
状态
的记录连接到带有
E
的图形中。我还有一个rid变量:
$current
。如何从
$current
中选择其他传出
状态
,并使用
WHERE
对其进行过滤

我知道如何使用
遍历
实现if,但不使用它是否可以实现if

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']
导致:


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

这个怎么样

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

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

这是我的图表

通过你的查询,我得到了这个结果

节点12:0是键为“a”的节点

使用从12:0 MAXDEPTH 1开始的
Travelout()
可以得到状态“a”、“b”、“d”

使用
select FROM(从12:0 MAXDEPTH 1开始遍历out())WHERE out()。键入['a','b','c']

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

使用
选择expand(out())FROM(TRAVERSE out()FROM 12:0 MAXDEPTH 1)WHERE out()。在['a','b','c']中键入键。
您将在输出中获得连接到“a”和“b”的状态,即b、d、c和e

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

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


希望能有所帮助。

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

这是我的图表

通过你的查询,我得到了这个结果

节点12:0是键为“a”的节点

使用从12:0 MAXDEPTH 1开始的
Travelout()
可以得到状态“a”、“b”、“d”

使用
select FROM(从12:0 MAXDEPTH 1开始遍历out())WHERE out()。键入['a','b','c']

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

使用
选择expand(out())FROM(TRAVERSE out()FROM 12:0 MAXDEPTH 1)WHERE out()。在['a','b','c']中键入键。
您将在输出中获得连接到“a”和“b”的状态,即b、d、c和e

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

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


希望有帮助。

WHERE
案例中使用
out().keys
in
WHERE
是否正常?事实上,我认为它工作不正常,我将更新我的答案。谢谢!这就是我要找的。在
WHERE
的情况下使用
out().keys
是正常的做法吗?事实上我认为它工作不正常,我要更新我的答案。谢谢!这就是我要找的。let的好解决方案。let的好解决方案。