我正在使用OrientDB,我有一个简单的架构:
User -> (AccessWith) -> AccessToken -> (HasClient) -> Client
(name)是边缘,其他是顶点。
我现在正在这样做:
select expand($token)
from #1:1
let $token = out('AccessWith')
where $token.out('HasClient').@rid = #2:1
(#1:1 是用户RID,#2:1 是客户端RID)
但是这个请求不起作用。 where子句根本没有效果。我可以删除它或放置一个不存在的RID,因此我总是拥有#1:1用户的所有AccessToken。
所以我想准确理解如何在where子句中使用out()(或in)函数并成功过滤用户RID(它工作正常)和客户端RID同时时间。
答案 0 :(得分:1)
试试这个:
select from (
select expand( out('AccessWith') ) from #1:1
) where #2:1 in out('HasClient').@rid
内部查询返回用户的所有AccessToken实例,然后对该结果集执行过滤。它应该应用WHERE。 Select和Traverse可以在另一个内部流水线化。
你也可以这样做:
select from AccessToken where #1:1 in in() and #2:1 in out()
但从节点开始通常会更快。