mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-08-09 00:27:11 +00:00
Merge pull request #123 from 1281956265/main
perf[orm]: 减少分布式id生成器创建时duplicate key问题
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user