2017-04-04 54 views
0

我一直試圖根據ID列表獲取批量文檔。但由於某種原因,我沒有看到在CRUD Repo中可以給我這些數據的方法。我能夠找到一個方法名稱「FindAll(List)」,但是這似乎只適用於名爲「all」的視圖,我不想引入一個簡單的查找視圖(主要應該是一個功能的couchbase)。如何根據彈簧數據中的密鑰獲取批量文檔/多個獲取基址

有人可以讓我知道什麼所有選項,我必須實現我的最終目標,如果我不想最終使用視圖或鎳查詢。

另外,它爲什麼不支持彈簧數據庫。這是不是預期的事情?

回答

0

根據documentation,與RxJava你可以使用有效的批處理。

代碼示例

bucket.async() 
     .query(N1qlQuery.simple("SELECT meta().id as id FROM bucket")) 
     .doOnNext(res -> res.info().map(N1qlMetrics::elapsedTime). 
     forEach(t -> System.out.println("time elapsed"+t))) 
     .flatMap(AsyncN1qlQueryResult::rows) 
     .flatMap(row -> 
     bucket.async(). 
     get(row.value().getString("id"))) 
     .map(JsonDocument::content). 
     toList() 
     .toBlocking() 
     .single(); 

RxJava是異步的,將節省額外的往返,應該結束了更好的表演!

+0

要添加到此答案中,您可以通過'CouchbaseTemplate'接口訪問'bucket',它本身可以從'CouchbaseRepository'接口訪問,以防萬一 –

1

Repository需要能夠findAll()文件,它負責保存。問題是,在Couchbase中,您可以將各種文檔保存在同一個存儲桶中,因此存儲庫需要一種僅隔離與其實體類型匹配的文檔的方法。

它通過查看CRUD操作以及生成的N1QL查詢的要求完成,方法是將_class字段上的條件附加到WHERE子句。

當您提供密鑰的List中,Couchbase庫只是重用其有責任確保不對應於正確的實體(即不通過索引鍵額外的好處,你必須進行配置,以便findAll()作品的看法,該視圖)將被忽略。

這就是說我認爲這是在路線圖上刪除視圖要求......(但這取決於Couchbase團隊,也許提出一個問題,以獲得更明確的答案)。

Spring Data Kay及其對Reactive Programming的支持很可能也會改變風景。