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