MongoDB基础八:Mongodb自增id实现方法

本文实例讲述了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,,具体原因如官方文档所提:

MongoDB基础八:Mongodb自增id实现方法_第1张图片
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}选项,会将更新后的文档输出。

你可能感兴趣的:(MongoDB基础八:Mongodb自增id实现方法)