通过拥有另外两个人的身份获得一条记录

时间:2014-08-10 13:38:12

标签: orientdb

我正在使用OrientDB,我有一个简单的架构:

User -> (AccessWith) -> AccessToken -> (HasClient) -> Client

(name)是边缘,其他是顶点。

我有用户和客户端RID,我想获得相应的AccessToken,我该怎么做?


我现在正在这样做:

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同时时间。

1 个答案:

答案 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()

但从节点开始通常会更快。