我正在尝试找到最有效的方法,以利用乐观锁定来批量更新一些mongo文档。
到目前为止,我有一个Java代码段,表示对单个文档的更新。我确保数据库中文档的版本与我的更新请求中的版本匹配。如果不是这样,我会失败。看起来是这样:
Bson filter = and(
eq("_id", new ObjectId("5d49e936b459ab4fccb08225")),
eq("version", 1));
Bson update = combine(
set("attribute", "B"),
inc("version", 1));
UpdateResult updateResult = collection
.updateOne(filter, update, new UpdateOptions().upsert(false));
if (updateResult.getModifiedCount() == 0) {
throw new ConcurrentModificationException();
}
我想在一个批量请求中发送一批这样的更新(到不同的文档)。
我查看了updateMany
方法并得出结论,如果我想跟踪哪些更新是成功的而哪些是由于乐观锁定而失败的,则该方法可能无效。 updateMany
方法返回一个UpdateResult
,它仅包含已修改文档的总数,而没有提供更新的文档ID。
是否有比使用异步驱动程序和逐个提交更新更有效的方法?也许我错过了一些东西。
我们可以假设一个批次的平均大小为数百。我正在使用Java mongo驱动程序3.10.2。