From 7724e83b5774faf2b3a3b7a30e7fb222474f3648 Mon Sep 17 00:00:00 2001 From: box <1281956265@qq.com> Date: Fri, 26 Jul 2024 12:00:40 +0800 Subject: [PATCH] =?UTF-8?q?perf[orm]:=20=E5=87=8F=E5=B0=91=E5=88=86?= =?UTF-8?q?=E5=B8=83=E5=BC=8Fid=E7=94=9F=E6=88=90=E5=99=A8=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=97=B6duplicate=20key=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zfoo/orm/util/MongoIdUtils.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/orm/src/main/java/com/zfoo/orm/util/MongoIdUtils.java b/orm/src/main/java/com/zfoo/orm/util/MongoIdUtils.java index b6f3744e..bcc429d9 100644 --- a/orm/src/main/java/com/zfoo/orm/util/MongoIdUtils.java +++ b/orm/src/main/java/com/zfoo/orm/util/MongoIdUtils.java @@ -14,11 +14,14 @@ package com.zfoo.orm.util; import com.mongodb.client.model.Filters; +import com.mongodb.client.model.FindOneAndUpdateOptions; +import com.mongodb.client.model.Updates; import com.zfoo.orm.OrmContext; import com.zfoo.protocol.collection.CollectionUtils; import com.zfoo.protocol.util.AssertionUtils; import com.zfoo.protocol.util.StringUtils; import org.bson.Document; +import org.bson.conversions.Bson; import java.util.ArrayList; import java.util.function.Consumer; @@ -50,16 +53,13 @@ public abstract class MongoIdUtils { public static long getIncrementIdFromMongo(String collectionName, String documentName) { var collection = OrmContext.getOrmManager().getCollection(collectionName); - var document = collection.findOneAndUpdate(Filters.eq("_id", documentName) - , new Document("$inc", new Document(COUNT, 1L))); + Bson query = Filters.eq("_id", documentName); + Document inc = new Document("$inc", new Document(COUNT, 1L)); + Document setOnInsert = new Document("$setOnInsert", new Document("_id", documentName)); - if (document == null) { - var result = collection.insertOne(new Document("_id", documentName).append(COUNT, INIT_ID)); - AssertionUtils.notNull(result.getInsertedId()); - return INIT_ID; - } + var document = collection.findOneAndUpdate(query, Updates.combine(inc, setOnInsert), new FindOneAndUpdateOptions().upsert(true)); - return document.getLong("count") + 1; + return null == document ? INIT_ID : document.getLong(COUNT) + 1; } public static long getIncrementIdFromMongoDefault(String documentName) {