2017-04-04 27 views
0

我一直试图根据ID列表获取批量文档。但由于某种原因,我没有看到在CRUD Repo中可以给我这些数据的方法。我能够找到一个方法名称“FindAll(List)”,但是这似乎只适用于名为“all”的视图,我不想引入一个简单的查找视图(主要应该是一个功能的couchbase)。如何根据弹簧数据中的密钥获取批量文档/多个获取基址

有人可以让我知道什么所有选项,我必须实现我的最终目标,如果我不想最终使用视图或镍查询。

另外,它为什么不支持弹簧数据库。这是不是预期的事情?

回答

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是异步的,将节省额外的往返,应该结束了更好的表演!

+0

要添加到此答案中,您可以通过'CouchbaseTemplate'接口访问'bucket',它本身可以从'CouchbaseRepository'接口访问,以防万一 –

1

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

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

当您提供密钥的List中,Couchbase库只是重用其有责任确保不对应于正确的实体(即不通过索引键额外的好处,你必须进行配置,以便findAll()作品的看法,该视图)将被忽略。

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

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