2015-12-21 149 views
0

鑑於下面的Java代碼的數組:迭代通過陣列出使用N1QL

String statement = "SELECT `path` FROM test-bucket;"; 
N1qlQueryResult queryResult = bucket.query(N1qlQuery.simple(statement); 

for (N1qlQueryRow n1qlQueryRow : queryResult) { 
    System.out.println(n1qlQueryRow.toString()); 
} 

而僅含有JSON-文件結構如以下示例上Couchbase測試桶:

{ 
    "path": "C:\\example\\filename.txt", 
    "outer_array": [ 
    { 
     "inner_array": [ 
     { 
      "value": 1, 
     }, 
     { 
      "value": 2, 
     } 
     ] 
    }, 
    { 
     "inner_array": [ 
     { 
      "value": 3, 
     } 
     ] 
    } 
    ] 
} 

我想用一個簡單的字符串遍歷outer_array和每個inner_array的每個value。如果至少有一個值滿足statement 的條件,則應將path添加到queryResult。 的statement應該是這個樣子(這個例子是錯誤的):

statement = "SELECT `path` FROM test-bucket WHERE outer_array.inner_array.value=1;"; 

但是,這顯然是行不通的。那麼我需要做些什麼來檢查每個value

+0

由於內部數組是一個數組* *,我認爲你可以使用'WHERE 1 IN outer_array.inner_array' –

+0

這並不爲我工作。沒有錯誤,運行代碼後'queryResult'爲空。 – Paul

+0

啊對。沒有意識到有一個JSON對象,而不是簡單的值數組。我的錯! –

回答

1

你可以做到以下幾點:

SELECT `path` 
FROM `test-bucket` 
WHERE ANY oa IN outer_array SATISFIES (ANY ia IN oa.inner_array SATISFIES ia.`value` = 1 END) END;