2015-11-08 48 views
1

我有文檔集合。文檔有一個字段,其值是一組地圖(例如:帶有一個字段name的地圖)。結構是這樣的:OrientDB:包含所有運算符

{ 
    arrayfield: [ 
    { 
     name: "value1", 
    }, 
    { 
     name: "value2", 
    } 
    ] 
} 

我想獲取文檔,其arrayfieds所有地圖包含從指定的數組值。文件說,我可以使用containsall運營商。我以這種方式使用它:

select from SomeCollection where arrayfiled containsall (name in ['value1','value2']) 

但是這種結構總是返回空結果。我錯在哪裏?謝謝。 PS:如果我的問題不能理解,我可以發表更詳細的收集示例以及我想要收到的結果。

+0

是什麼類型的財產arrayfiled? –

+0

這是一個數組。 – bartl

+0

您可以發佈以下查詢的結果「從SomeCollection中選擇」嗎? 我會明白,如果arrayfiled類型嵌入式,embeddedList,embeddedSet,emnbeddedMap,鏈接,linkList,linkMap,linkSet –

回答

0

找到了解決辦法來解決我的問題,而不containsAll:

select from SomeCollection where not (arrayfield contains (fname not in ["value1", "value2"]))

0

嘗試以下查詢

select from SomeCollection where arrayfiled.name contains "value1" and arrayfiled.name contains "value2" 

enter image description here

+0

感謝您的答案。但這不完全是我需要的。讓我描述一下情況。我有字符串數組:[value1,value2,value3,...](來自網絡請求)。我需要查詢滿足下一個條件的文檔:** all **它的'arrayfield'中的元素必須具有來自傳遞的字符串數組的名稱。並且字符串數組的長度可能大於'arrayfield'中的元素數 – bartl

+0

查詢必須從您的測試示例的10:1,10:2,10:3和10:7行返回輸入字符串數組''[ 「value1」,「value2」]'。 – bartl

+0

另外我可以在運行時修改查詢的where子句,如果它幫助解決這個 – bartl