如何在MongoDB中实现自动递增的主ID?

TIM*_*MEX 9 mysql database mongodb

就像在MYSQL中一样,我想要一个递增的ID.

Chr*_*ald 18

您需要使用MongoDB的findAndModify命令.有了它,您可以自动选择并增加一个字段.

db.seq.findAndModify({
  query: {"_id": "users"},
  update: {$inc: {"seq":1}},
  new: true
});
Run Code Online (Sandbox Code Playgroud)

这将增加users集合的计数器,然后您可以在插入之前将其添加到文档中.由于它是原子的,因此您不必担心会导致ID冲突的竞争条件.

它不像MySQL的auto_increment标志那么无缝,但您通常也可以选择在Mongo驱动程序中指定自己的ID工厂,这样您就可以实现一个使用findAndModify来透明地递增和返回ID的工厂,从而产生更像MySQL的经验.

这种方法的缺点是,由于每个插入都依赖于序列集合上的写锁定,如果您正在进行大量写操作,那么您可能会很快就会出现瓶颈问题.如果您只想保证集合中的文档按插入顺序排序,请查看Capped Collections.


Den*_*ton 13

MongoDB旨在通过水平扩展.在这种情况下,自动增量会导致id冲突.这就是为什么id看起来更像guid/uuid.