2013-06-27 79 views
1

我是CouchBase的新手。我有幾個簡單的文件:如何通過java客戶端查詢couchbase中的特定鍵?

1. { 
    "docType": "DeviceData", 
    "id": "57 0F 75 00 C8 [email protected] 23:59:38.979", 
    "time": 1372271378979, 
    "group": "London" 
} 

2. { 
    "docType": "DeviceData", 
    "id": "57 0F 75 00 C8 [email protected] 10:02:46.197", 
    "time": 1372307566197, 
    "group": "Bristol" 
} 

3. { 
    "docType": "DeviceData", 
    "id": "57 0F 75 00 C8 [email protected] 10:03:36.4", 
    "time": 1372307616400, 
    "group": "Bristol" 
} 

我有要求查詢組和時間。例如我想要取所有與組=布裏斯托爾的文件和時間從1372307616100到1372307616500.所以我處理我應該得到3文檔中的2。

所以我要創建視圖:

function (doc, meta) { 
    if(doc.docType == "DeviceData") 
    emit([doc.group, doc.time], doc); 
} 

並在Java代碼中設置查詢如下:

String str = "[\"Bristol\", 1372307566100]"; 
     String end = "[\"Bristol\", 1372307616500]"; 
     query.setRange(str, end); 
     List<DeviceData> deviceData = cbStore.getView("getDevices", DeviceData.class, query); 

但是,讓零文件。

請讓我知道我有什麼問題嗎?需要幫助謝謝。

* 編輯: 我嘗試使用複雜鍵以及像下面,但沒有運氣。

ComplexKey startKey = ComplexKey.of("Bristol", "1372307566100"); 
ComplexKey endKey = ComplexKey.of("Bristol", "1372307616500"); 
+0

1.嘗試查看使用什麼的'Stale'參數值的方式。並嘗試將其設置爲'Stale = false'。 2.檢查您是否發佈了您的視圖。 3.使用Couchbase Web管理面板中的相同參數檢查視圖。如果它返回正確的值,那麼問題出現在您的應用程序中,而不是couchbase。 – m03geek

+0

我已經發布了該視圖,我可以在使用REST網址嘗試獲取記錄。 – GuruKulki

+0

「陳舊」參數呢?正如我記得它應該像'query.setStale(Stale陳舊)'。 PS:順便說一下,不要在你的視圖中包含文檔,如:'emit([doc.group,doc.time],doc);'。最好使用'emit([doc.group,doc.time],null);'並將'IncludeDocs'添加到您的查詢中:'query.setIncludeDocs(boolean include)'。 – m03geek

回答

5

的問題是,在你的對象的時間是很長的,而不是一個字符串:

query.setStale(Stale.FALSE); 
long firstParameter=1372307566197l; 
long secondParameter=1372307616400l; 
//["Bristol",1372307566197] 
ComplexKey startKey = ComplexKey.of("Bristol", firstParameter); 
//["Bristol",1372307616400] 
ComplexKey endKey = ComplexKey.of("Bristol", secondParameter); 
query.setRange(startKey, endKey); 
ViewResponse result = client.query(view, query); 
Iterator<ViewRow> iter = result.iterator(); 
while(iter.hasNext()) { 
    ViewRow row = iter.next();  
    System.out.println(row.getId()); // ID of the document 
    System.out.println(row.getKey()); // Key of the view row 
    System.out.println(row.getValue()); // Value of the view row 
    System.out.println(row.getDocument()); // Full document if included 
    } 
相關問題