我一直在尝试根据id列表获取批量文档。但由于某些原因,我没有在CRUD Repo中看到一个方法可以给我这些数据。我能够找到方法名称“FindAll(List)”,但这似乎仅适用于名为“all”的视图,我不想为简单查找引入视图(主要应该是一个功能of couchbase)。
如果我不想最终使用视图或镍查询,有人可以让我知道我有什么选择来实现我的最终目标。
另外,为什么Spring数据沙发库不支持它。这是不是预料到的事情吗?
答案 0 :(得分:1)
Repository
需要能够findAll()
负责保存的文档。问题是,在Couchbase中,您可以将所有类型的文档保存在同一个存储桶中,因此存储库需要一种仅隔离与其实体类型匹配的文档的方法。
完成了View for CRUD操作的要求,以及通过在_class
字段上附加WHERE子句的条件来生成N1QL查询。
当您提供List
个密钥时,Couchbase存储库只需重新使用您必须配置的视图,以便findAll()
正常工作,这样可以确保密钥与正确的实体不对应(也就是说,没有被视图索引)将被忽略。
这就是说我认为删除视图要求的路线图......(但这取决于Couchbase团队。可能会提出一个问题以获得更明确的答案)。
Spring Data Kay及其对Reactive Programming的支持很可能也会改变现状。
答案 1 :(得分: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是异步的,可以节省额外的往返次数,最终会有更好的表现!