首页 文章

如何根据spring数据基础中的键获取批量文档/ multi gets

提问于
浏览
0

我一直在尝试根据id列表获取批量文档 . 但由于某些原因,我没有在CRUD Repo中看到一个方法可以给我这些数据 . 我能够找到方法名称“FindAll(List)”,但这似乎仅适用于名为“all”的视图,我不想为简单查找引入视图(主要应该是一个功能of couchbase) .

如果我不想最终使用Views或Nickel查询,有人可以让我知道我有什么选择来实现我的最终目标 .

另外,为什么Spring数据沙发库不支持它 . 这是不是预料到的事情吗?

2 回答

  • 1

    Repository 需要能够保存任务的 findAll() 文档 . 问题是,在Couchbase中,您可以将所有类型的文档保存在同一个存储桶中,因此存储库需要一种仅隔离与其实体类型匹配的文档的方法 .

    它通过View for CRUD操作的要求以及生成的N1QL查询来完成,方法是将 _class 字段上的条件附加到WHERE子句 .

    当您提供 List 个密钥时,Couchbase存储库只是重新使用您必须配置的视图以便 findAll() 工作,这具有确保与正确的实体(即未被视图编制索引)不对应的密钥的额外好处被忽略了 .

    这就是说我认为删除视图要求的路线图......(但这取决于Couchbase团队 . 也许提出一个问题来获得更明确的答案) .

    Spring Data Kay及其对Reactive Programming的支持很可能也会改变景观 .

  • 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是异步的,可以节省额外的往返次数,最终会有更好的表现!

相关问题