Atomic Update
first/multi/upsertOne で対象範囲を選択し、ドキュメントの更新または集約パイプラインの更新を明示的に構成します。
更新範囲と表現を先に選択します
text
atomicUpdate()
-> first() / multi() / upsertOne()
-> document() / pipeline()
-> update operations
-> execute()ドキュメントの更新
java
Mono<UpdateResult> updated = dsl
.executeEntity(User.class, MongoTemplateName.FRONT)
.fields(pair("id", userId))
.end()
.atomicUpdate()
.first()
.document()
.inc("loginCount", 1)
.set("lastLoginAt", Instant.now())
.execute();• inc, set, unset, push, addToSet, pull
• ドライバ更新をそのまま追加: driverUpdate(Bson)
• setOnInsert(...) は upsertOne().document() で使用します
単一ドキュメントのアップサート
java
.atomicUpdate()
.upsertOne()
.document()
.set("status", "ACTIVE")
.setOnInsert("createdAt", Instant.now())
.execute();パイプライン更新
java
.atomicUpdate()
.first()
.pipeline()
.set("updatedAt", "$$NOW")
.inc("loginCount", 1)
.nextStage()
.unset("legacyField")
.stage(Aggregates.set(new Field<>("normalized", ...)))
.execute();nextStage() は現在の保留中の $set を1つのステージとしてフラッシュします。Driver-native パイプラインステージは stage(Bson) で直接追加します。