Orient SQL - 使用WHERE过滤结果集?

时间:2015-12-07 17:25:18

标签: orientdb orientdb-2.1 orient-sql

我对Orient SQL查询有一些语义问题。

以这个非常简单的图表为例:

v(#12:1 User) --> e(#13:1 FriendOf) --> v(#12:2 User)

换句话说,摆脱#12:1的给定用户与另一个摆脱#12:2的用户是朋友。

要获得用户#12:1的朋友,可以在Orient SQL中表达这一点,如下所示:

SELECT EXPAND(both("FriendOf")) FROM #12:1

此查询将返回由User#rid:12:2组成的结果列表。

现在假设我想通过其他条件过滤该结果列表,例如数字值("年龄"):

SELECT EXPAND(both("FriendOf")) FROM  #12:1 WHERE age >= 10

上述查询将过滤CURRENT顶点(#12:1),而不是结果集。这是有道理的,但有没有办法将过滤器应用于EXPAND(两者(" FriendOf"))结果而不是当前顶点?我知道我可以这样用gremlin这样做:

SELECT EXPAND(gremlin('current.both("FriendOf").has("age",T.gte,10)')) FROM #12:1

但上面似乎没有使用索引(至少在我要求它解释时不是这样)。对于非常大的数据集,这是有问题的。

是否有一种将WHERE语句应用于结果数据集的正确方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

  

...有没有办法将过滤器应用于EXPAND(两者(“FriendOf”))结果而不是当前顶点?

简单的答案是将您的基本“SELECT EXPAND ...”嵌入另一个SELECT中,即

SELECT FROM (SELECT EXPAND(both("FriendOf")) FROM #12:1) WHERE age >= 10

顺便说一句,在我的Mac上,上面的内容为.005s,而Gremlin版本则为2s。某处必须有道德: - )