node mysql id自增_mongodb nodejs一个有自增id的功能

需求描述:

需要用MongoClient模块 ,TypeScript语言 来做一个注册表功能。

要保证玩家的userid 是自增的、唯一的。

注意:这不是关于MongoClient读写数据库的基础教程。(这方面基础知识,请百度菜鸟教程)

这是一个真实案例。是关于如何在MongoDB里面,实现某个字段的自增长。。。例如玩家注册的时候,userid要保证唯一。

当前版本号:MongoDB shell version v4.2.5

官方对于API的解释:

对于 $inc 的解释:

/**1.连接数据库服务器*/MongoClient.connect(url,function(err, dbClient) {//assert.equal(err, null);

if(err) {

MyUtil.outputErrorInfo("MongoDBManager", "userRegister", "register error");

console.error(err);

objReturn.code=NetMessageID.ERROR_CODE.REGISTER_FAILED;

objReturn.des= "注册失败,数据库有问题";

resolve(objReturn);

dbClient.close();return;

}/**2.连接某个具体的数据库*/const UserDB=dbClient.db(dbname);/**3.连接数据库的某个表*/const registerCollection= UserDB.collection(table_register);

registerCollection.findOneAndUpdate(

{ increase:1},

{ $inc: { userid:1 }, $set: { des: "This line record total num"} },

{"upsert": true, "returnOriginal": false }, (err, res) =>{if(err) {

console.error(err);

MyUtil.outputErrorInfo("MongoDBManager", "userRegister", "insert error");

console.error(err);

objReturn.code=NetMessageID.ERROR_CODE.REGISTER_FAILED;

objReturn.des= "注册失败,保存数据库失败,未知错误1";

objReturn.userid= 0;

resolve(objReturn);

dbClient.close();return;

}/**取出了递增的id值,把玩家userid字段赋值*/oneUser.userid= MongoDBManager.g_BaseUserID +res.value.userid;/**插入我们的新数据*/registerCollection.insertOne(oneUser, (err, res)=>{if(err) {

MyUtil.outputErrorInfo("MongoDBManager", "userRegister", "insert error");

console.error(err);

objReturn.code=NetMessageID.ERROR_CODE.REGISTER_FAILED;

objReturn.des= "注册失败,保存数据库失败,未知错误";

objReturn.userid= 0;

resolve(objReturn);

dbClient.close();return;

}

});/**如果一切正常,会走到这里.把userid值放入返回值,传递出去*/objReturn.userid=oneUser.userid

objReturn.code=NetMessageID.ERROR_CODE.IS_OK;

objReturn.des= "注册成功";

MyUtil.outputErrorInfo("MongoDBManager.ts", "userRegister", `新玩家[${regist.username}]注册成功,userid:${objReturn.userid}`);

resolve(objReturn);

dbClient.close();

数据库效果图:

b26cd9f97f7a975d29cb33ea4b1cd27a.png

我们这里调用了2次 Mongo的函数。

1.调用findOneAndUpdate 函数。这个是原子操作,它始终只会读写第一条数据。每次主要目的就是记录自增值。

2.调用insertOne函数, 插入一条数据。。。我们是在  findOneAndUpdate  的回调中调用的,意思就是获取到自增的值之后,我们才知道真正的userid是都少,才正式把玩家的注册信息保存到数据库。

这些字段是什么意思,请参考前面贴出的连接的文章。

{ increase: 1},{ $inc: { userid: 1 }, $set: { des: "This line record total num"} },{ "upsert": true, "returnOriginal": false }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值