簡體   English   中英

OrientDB使用子查詢的結果搜索索引

[英]OrientDB use result of subquery to search index

我正在使用OrientDb 2.1-rc4作為文檔數據庫。 我有一個MyClass類,該類經常被多用途應用程序更新。 為了提高性能,我刪除了從State類到MyClass的鏈接,並添加了從MyClassState.的鏈接和索引State. 為了獲取MyClass所有實例,我需要獲取State rids的列表,然后查詢索引。 該查詢使我擺脫了狀態。

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

退貨

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

該查詢在索引中找到正確的擺脫。

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無法轉換為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM