本文實(shí)例講述了Mongodb自增id實(shí)現(xiàn)方法虫埂,具體如下:
-
首先創(chuàng)建一個(gè)自動(dòng)增長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 }
注:因?yàn)閒indAndModify是一個(gè)方法完成更新查找兩個(gè)操作卧晓,所以具有原子性,多線程不會沖突悦即。
然后保存相應(yīng)的數(shù)據(jù)
>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"});
查詢一下剛剛添加的用戶數(shù)據(jù):
> db.user.find();
{ "_id" : ObjectId("4c637f79900f00000000686d"), "uid" : 1, "username" : "admin", "password" : "admin" }
注意:
如果你是通過mongoose模塊來進(jìn)行上面的操作吮成,應(yīng)使用model.findOneAndUpdate()
方法對ids
集合的id
進(jìn)行自增,另外辜梳,在新版本中粱甫,需要在mongoose.connect()
時(shí)配置useFindAndModify: false,
,具體原因如官方文檔所提:
在js項(xiàng)目中使用mongoose模塊實(shí)現(xiàn)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}
選項(xiàng)作瞄,會將更新后的文檔輸出茶宵。