[英]How to get bulk documents/multi gets based on keys in spring data couchbase
我一直在尝试根据ID列表获取批量文件。 但是由于某些原因,我没有在CRUD Repo中看到可以提供该数据的方法。 我能够找到一个名为“ FindAll(List)”的方法,但这似乎仅在名为“ all”的视图上起作用,并且我不想为简单的查找引入视图(主要应该是一个功能)沙发底座)。
如果我不想最终使用“视图”或“镍查询”,有人可以让我知道实现最终目标所需要的所有选择。
另外,为什么Spring Data Couchbase不支持它。 这是意料之外的事吗?
Repository
需要能够findAll()
要执行保存任务的findAll()
文档。 问题是,在Couchbase中,您可以将各种文档保存在同一存储桶中,因此存储库需要一种仅隔离与其实体类型匹配的文档的方法。
通过将View的CRUD操作和生成的N1QL查询的要求完成,方法是将_class
字段上的条件附加到WHERE子句中。
当您提供密钥List
时,Couchbase存储库会简单地重用您必须配置的视图,以便findAll()
起作用,这还有确保密钥与正确的实体(即,未由视图索引)相对应的其他好处。 )将被忽略。
话虽如此,我认为删除视图要求已在路线图上……(但这取决于Couchbase团队。也许会提出一个问题以获得更明确的答案)。
Spring Data Kay及其对响应式编程的支持很可能也会改变现状。
根据文档 ,使用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是异步的,将节省额外的往返次数,并且最终将获得更好的性能!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.