我在当前最新版本中使用 spring-boot-starter-data-mongodb-reactive 。我需要更新集合中许多文档中的计数字段,但每个文档的计数字段不同。我正在寻找一种执行批量更新的方法,这样我就不必为每个项目单独执行一百万次更新。
我的第一种方法是创建一个UpdateOneModel
包含Criteria
和 的列表Update
。我可以从ReactiveMongoOperations
实例中获取集合,但这感觉是一种非常尴尬的方式。它看起来像这样:
Mono<MongoCollection<Document>> collection = mongoOps.getCollection(mongoOps.getCollectionName(Foo.class));
BulkWriteOptions options = new BulkWriteOptions()
.bypassDocumentValidation(true)
.ordered(false);
return result.getCounts()
.reduce(<Creating a map of ID to new count>)
.map(<Creating an UpdateModel<Document> instance)
.map(updates -> collection.map(c -> c.bulkWrite(updates, bulkWriteOptions)))
.then();
这感觉像是尝试执行批量更新的一种奇怪(几乎是蛮力)的方式。我错过了什么吗?Spring 通常包含执行批量更新的方法,但它们的响应式 mongo 库显然不包含它。我还能尝试什么?