原子更新
使用 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
• 直接添加 Driver 更新:driverUpdate(Bson)
• setOnInsert(...) 在 upsertOne().document() 中使用
單文檔 upsert
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 刷新為一個階段。Driver-native 管道階段直接使用 stage(Bson) 添加。