我一直試圖根據ID列表獲取批量文檔。但由於某種原因,我沒有看到在CRUD Repo中可以給我這些數據的方法。我能夠找到一個方法名稱「FindAll(List)」,但是這似乎只適用於名爲「all」的視圖,我不想引入一個簡單的查找視圖(主要應該是一個功能的couchbase)。如何根據彈簧數據中的密鑰獲取批量文檔/多個獲取基址
有人可以讓我知道什麼所有選項,我必須實現我的最終目標,如果我不想最終使用視圖或鎳查詢。
另外,它爲什麼不支持彈簧數據庫。這是不是預期的事情?
我一直試圖根據ID列表獲取批量文檔。但由於某種原因,我沒有看到在CRUD Repo中可以給我這些數據的方法。我能夠找到一個方法名稱「FindAll(List)」,但是這似乎只適用於名爲「all」的視圖,我不想引入一個簡單的查找視圖(主要應該是一個功能的couchbase)。如何根據彈簧數據中的密鑰獲取批量文檔/多個獲取基址
有人可以讓我知道什麼所有選項,我必須實現我的最終目標,如果我不想最終使用視圖或鎳查詢。
另外,它爲什麼不支持彈簧數據庫。這是不是預期的事情?
根據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是異步的,將節省額外的往返,應該結束了更好的表演!
Repository
需要能夠findAll()
文件,它負責保存。問題是,在Couchbase中,您可以將各種文檔保存在同一個存儲桶中,因此存儲庫需要一種僅隔離與其實體類型匹配的文檔的方法。
它通過查看CRUD操作以及生成的N1QL查詢的要求完成,方法是將_class
字段上的條件附加到WHERE子句。
當您提供密鑰的List
中,Couchbase庫只是重用其有責任確保不對應於正確的實體(即不通過索引鍵額外的好處,你必須進行配置,以便findAll()
作品的看法,該視圖)將被忽略。
這就是說我認爲這是在路線圖上刪除視圖要求......(但這取決於Couchbase團隊,也許提出一個問題,以獲得更明確的答案)。
Spring Data Kay及其對Reactive Programming的支持很可能也會改變風景。
要添加到此答案中,您可以通過'CouchbaseTemplate'接口訪問'bucket',它本身可以從'CouchbaseRepository'接口訪問,以防萬一 –