使用Next.js中的锁定线程防止重复的用户id



我使用MongoDB来存储用户数据。当新用户注册时,用户id会递增,例如1、2、3、4等。

我有下面的代码来生成用户id;用户";是存储用户数据的集合的名称。

// generate new user id
let uid;
const collections = await db.listCollections().toArray();
const collectionNames = collections.map(collection => collection.name);
if(collectionNames.indexOf("users") == -1){
uid = 1;
}
else{
const newest_user = await db.collection("users").find({}).sort({"_id":-1}).limit(1).toArray();
uid = newest_user[0]["_id"] + 1;
}
user._id = uid;

// add and save user
db.collection("users").insertOne(user).catch((error)=>{
throw error;
});

我现在担心的一个问题是,当两个用户同时请求注册时,他们将获得相同的最大用户id,并创建相同的新用户id。防止这种情况的一种方法是使用锁定线程。但是,我认为Node.js和Next.js不支持多线程。我有什么替代方案来解决这个问题?

此外,_id将是uid的字段。既然_id不能重复,这会有什么不同吗。

为什么不让数据库生成自动递增ID?https://www.mongodb.com/basics/mongodb-auto-increment

我的一个想法是使用一个可以解决并发问题的事务。事务遵循ACID规则。并发请求对数据库的写入将在隔离状态下运行。

最新更新