Auto increment in mongodb

mongodb本身並沒有提供auto increment,若要達成與mysqlauto increment相同功能,需要由程式自行控制,或者可以使用findAndModify

例如:

//在counter collection新增一筆資料,紀錄id目前新增至第幾筆
db.counters.insert({_id:"userId",c:0});

//在counters裡,收尋_id 相等於 userId的資料,並且將c的column加一
var counter = db.counters.findAndModify({query:{_id:"userId",update:{$inc:{c:1}}}});

//新增一筆user
db.users.insert( { _id: counter.c, name:"sparrow" } );

//id在加一
counter = db.counters.findAndModify({query:{_id:"userId",update:{$inc:{c:1}}}});

//新增第二筆user
db.users.insert( { _id: counter.c, name:"peter" } );

上面的例子,就是在使用一個collection,來存放目前id的最後遞增值。不過這種作法,在效率上較差,如果id不一定需要為連續的,可使用原先的object id,效率會比上面這種方式快很多。(參考此篇blog

官方的auto increment的實現方式

findAndModify的參數參照