OrientDB 使用子查询的结果来搜索索引

OrientDB use result of subquery to search index

我正在使用 OrientDb 2.1-rc4 作为文档数据库。我有一个 MyClass class 被多线程应用程序频繁更新。为了提高性能,我从 State class 中删除了 link 到 MyClass,并添加了 link 和从 MyClass 到 [=19 的索引=] 为了获得 MyClass 的所有实例,我需要获得 State 的列表,然后查询索引。这个查询得到了我的州摆脱。

SELECT DISTINCT(roles.views.states.@rid) 
FROM #12:1

returns

[["#14:0","#14:1"]]

此查询在索引中找到正确的 rids。

SELECT FROM index:MyClass.state 
where key in [#14:0,#14:1] 

当我将两个查询放在一起时。

SELECT FROM index:MWorkUnit.state 
where key in (SELECT DISTINCT(roles.views.states.@rid) FROM #12:1) 

我收到以下错误。

java.lang.ClassCastException: com.orientechnologies.orient.core.sql.query.OSQLSynchQuery cannot be cast to java.util.List

如何让 OrientDB 将我的子查询视为删除列表?

编辑: 此查询在不使用索引时有效。

SELECT FROM MWorkUnit 
where state IN (SELECT expand(roles.views.states).@rid FROM #12:1)

这似乎是针对索引查询的错误:未正确评估子查询。请问你能开个新问题吗?

此解决方法应该有效:

SELECT FROM index:MWorkUnit.state 
LET $list = (SELECT DISTINCT(roles.views.states.@rid) FROM #12:1) 
where key in $list