本文实例讲述了Mongodb自增id实现方法,具体如下:
-
首先创建一个自动增长id集合 ids
>db.ids.save({name:"user", id:0});
可以查看一下是否成功
> db.ids.find();
{ "_id" : ObjectId("4c637dbd900f00000000686c"), "name" : "user", "id" : 0 }
-
然后每次在db.user集合里添加新用户之前,添加新用户之前自增一下 ids集合 获得id:将
db.ids
集合中的name="user"
文档的id值加1,返回文档。
>userid = db.ids.findAndModify({update:{$inc:{'id':1}}, query:{"name":"user"}, new:true});
{ "_id" : ObjectId("4c637dbd900f00000000686c"), "name" : "user", "id" : 1 }
注:因为findAndModify是一个方法完成更新查找两个操作,所以具有原子性,多线程不会冲突。
然后保存相应的数据
>db.user.save({uid:userid.id, username:"dotcoo", password:"dotcoo"});
将上面两端代码合并:
>db.user.save({
uid: db.ids .findAndModify({
update:{$inc:{'id':1}},
query:{"name":"user"},
new:true}).id,
username: "dotcoo",
password:"dotcoo"});
查询一下刚刚添加的用户数据:
> db.user.find();
{ "_id" : ObjectId("4c637f79900f00000000686d"), "uid" : 1, "username" : "admin", "password" : "admin" }
注意:
如果你是通过mongoose模块来进行上面的操作,应使用model.findOneAndUpdate()
方法对ids
集合的id
进行自增,另外,在新版本中,需要在mongoose.connect()
时配置useFindAndModify: false,
,具体原因如官方文档所提:
image.png
在js项目中使用mongoose模块实现id自增的具体代码如下:
const IDs = require('./dataModel/ids');
const Adminuser = require('./dataModel/adminuser');
IDs.findOneAndUpdate({name: 'user'}, {$inc: {id: 1}}, {new: true,}, (err, docs)=>{
if(err) return err;
console.log(docs);
const adminuser = Adminuser({
user_id: docs.id,
username: 'admin'+docs.id,
password: '12345678'
});
adminuser.save((err, docs)=>{
if(err) return err;
console.log(docs);
})
})
{new: true}
选项,会将更新后的文档输出。