mongodb插入数据时如何实现id自增?

一般mysql中建表的时候,可以设置主键id自增,如下
id BIGINT(20) PRIMARY KEY NOT NULL AUTO_INCREMENT,
而现在我用的mongodb,想通过pymongo库同样实现一个每插入一条记录,自身id就根据表中最后一条记录自增,如何实现?我目前只有每次插入的时候查询一次表的长度,然后+1实现,这样不太靠谱,因为多线程使用的时候会出现id重复,有其它办法实现吗?

阅读 13.8k
4 个回答

谢谢各位的解答,我这边情况比较特殊,因为服务器上还部署了redis数据库,所以我实现自增是在redis中自增id获得的值作为mongodb的自增id,redis的incr操作可以实现返回自增id的值,即使多线程,高并发,也不会出现id重复的情况。redis的incr是可以同时自增并返回增长后的值的,这样可以弥补mongodb的自增困境。

  1. 使用另外的id管理表进行id管理,采用inc操作实现多线程不重复id
  2. 不建议将你自己生成的id替代_id
    PHP的参考代码,大致逻辑比较简单
    public static function getId($collection)
    {
        list($db, $collection) = explode('.', $collection);
        $command = new Command(array(
            'findandmodify' => 'ids', 'update' => ['$inc' => ['id' => 1]],
            'query' => ['collection' => $collection], 'new' => true, 'upsert' => true
        ));
        $cursor = self::getManager()->executeCommand($db, $command);
        $cursor->setTypeMap(['root' => 'array']);
        return $cursor->toArray()[0]['value']->id;
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题