`
sdmzhu3
  • 浏览: 30853 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mongodb 自增id 的解决方法

阅读更多
mongodb  自增id的解决方法

mongodb id autoincrement

mongodb 没有自增id的解决方法
1.
function insertObject(o) {
    x = db.myCollection;
    while( 1 ) {
        // determine next _id value to try
        var c = x.find({},{_id:1}).sort({_id:-1}).limit(1);
        var i = c.hasNext() ? c.next()._id + 1 : 1;
        o._id = i;
        x.insert(o);
        var err = db.getLastErrorObj();
        if( err && err.code ) {
            if( err.code == 11000 /* dup key */ )
                continue;
            else
                print("unexpected error inserting data: " + tojson(err));
        }
        break;
    }
}

2.建立一个自增id的集合
//初始化
db.ids.save({'_id':'main','id':0});

//每次使用的时候自增下
db.ids.update({"_id":"main"},{$inc:{'id':1}});

> db.ids.save({'_id':'main','id':0});           
> db.ids.find()
{ "_id" : "main", "id" : 0 }
//每次使用的时候自增下
> db.ids.update({"_id":"main"},{$inc:{'id':1}});
> db.ids.find()                                
{ "_id" : "main", "id" : 1 }
> db.ids.save({'_id':'user','id':0});          
> db.ids.update({"_id":"user"},{$inc:{'id':1}});
> db.ids.find()                                
{ "_id" : "main", "id" : 1 }
{ "_id" : "user", "id" : 1 }

//此操作是原子操作
db.ids.update({"_id":"main"},{$inc:{'id':1}});
分享到:
评论

相关推荐

    Mongodb自增id实现方法

    而在 MongoDB 中,由于其非关系型的特性,自增ID的实现方式与传统SQL数据库略有不同。本文将详细介绍如何在 MongoDB 中实现自增ID。 首先,我们需要创建一个专门用来存储自增ID的集合,例如 `ids`。在这个集合中,...

    php实现Mongodb自定义方式生成自增ID的方法

    在PHP中实现MongoDB自定义方式生成自增ID的方法,主要涉及到MongoDB的数据库操作以及自定义函数的编写。MongoDB是一种文档型数据库,它不支持传统的SQL中的自增序列,但可以通过特定的方式模拟实现这一功能。以下是...

    Python+MongoDB自增键值的简单实现

    尽管这种方法能够实现自增ID,但也存在一些缺点。首先,它增加了代码的复杂性,需要额外的方法调用来确保自增操作的正确性。其次,每次插入记录时都需要额外的数据库查询,可能会对性能产生一定影响。为了确保ID的...

    spring-data集成mongodb大数据量分页+自增id实现+MongodbPlugin集成

    skip随着数据量上去,分页性能极具下降,不推荐。这里使用spring-data-mongo实现的分页,并且实现了mongodb自增id(监听器方式)、也集成了轻量级插件MongodbPlugin,有需要的可以下载看看哦~

    详解如何使用MongoDB+Springboot实现分布式ID的方法

    在实现分布式ID时,通常有几种方案:使用数据库自增ID、使用Redis的incr命令、使用UUID、Twitter的snowflake算法、利用Zookeeper生成唯一ID、MongoDB的ObjectId等。每种方案都有其优缺,需要根据实际情况选择合适的...

    一个用于自动生成更方便阅读的id的mongoose插件

    标题提到的"一个用于自动生成更方便阅读的id的mongoose插件"解决了MongoDB默认生成的ObjectID难以阅读的问题。在MongoDB中,每个文档都有一个唯一的_id字段,通常由12字节的十六进制字符串表示,这些字符串虽然确保...

    java mongodb orm 实现-基于mongodb-driver开发的ORM.pdf

    MongoDB是一个分布式文档型数据库,以其灵活性、高性能和易扩展性在现代软件开发中占据了重要地位。...总的来说,这个基于`mongodb-driver`的ORM实现为Java开发MongoDB应用提供了一种优雅、高效的解决方案。

    MongoDB的PHP驱动方法与技巧

    例如,可以通过PHP7的Mongodb API来实现更高级的操作,利用Ubuntu下的命令安装PHP的MongoDB扩展,或通过PHP类实现自定义的MongoDB自增ID功能,以及进行分组操作等。掌握这些技术可以帮助开发者更好地利用MongoDB的...

    Robomongo mongodb数据库连接工具

    在Robomongo中,你可以方便地创建集合,设置其属性,如是否启用唯一索引,或者设置自增ID。 4. **查看和编辑表结构**:查看集合的字段和数据类型,可以添加、删除或修改字段,调整文档(记录)的结构。 5. **数据...

    MongoDb数据结构详解.pdf

    ObjectId由四个部分组成:4字节的时间戳(从1970年1月1日以来的秒数)、3字节的机器标识符、2字节的进程ID以及3字节的自增计数器,确保了其全局唯一性。 5. **GridFS**:对于大型文件的存储,MongoDB提供了GridFS...

    分布式ID生成器的解决方案总结.docx

    3. 数据库自增ID 数据库的自动递增主键是一种简单方法,但过度依赖数据库,不适合分布式环境。分库分表或数据迁移会导致问题。 4. 批量生成ID 一次性生成多个ID,减少数据库访问次数,但可能导致ID不连续,且不...

    分布式ID常见解决方案.docx

    3. 基于数据库的方案:利用数据库的自增ID功能,简单且易于维护,ID单调递增。但这种方法存在单点故障风险,不易扩展,跨数据库迁移或分库分表时会有问题。 4. 其他方案:Redis的自增函数、ZooKeeper、MongoDB的...

    全局唯一ID生成

    在单体应用时代,我们可以通过数据库自增ID或时间戳+序列号等方式生成唯一ID。但在分布式环境下,这些方法往往无法满足需求,因为它们可能会导致ID冲突或性能瓶颈。 一种常见的分布式ID生成方案是雪花算法...

    java操作mongodb增删改查

    要向MongoDB中插入一条记录,可以使用`insert`方法。下面展示如何插入一条用户记录。 ```java DBObject dbObj = new BasicDBObject(); dbObj.put("_id", 1); // _id 字段作为主键使用 dbObj.put("userId", userId); ...

    mongotest.zip

    总的来说,这个 demo 项目展示了如何利用 Spring Boot 和 Spring Data MongoDB 进行数据操作,同时解决 MongoDB 自增主键的问题。对于初学者,这是一个很好的起点,有助于深入理解这两个技术的结合使用。如果你对 ...

    MongoDB 自动增长

    `_id`字段在MongoDB中扮演着关键角色,它是每个文档的唯一标识符,通常由12字节的 ObjectId 组成,包含了时间戳、机器标识、进程ID和随机数,确保了全局的唯一性。 然而,在某些场景下,开发者可能希望模拟类似于...

    分布式锁,分布式ID,分布式消息队列、配置中心、注册中心、服务注册发现、超时、重试、熔断-Hummingbird.zip

    常见的解决方案有雪花算法(Snowflake)、UUID、MongoDB自增ID、Twitter的SnowFlake以及各种分布式ID生成服务如Twitter的Birch。 3. **分布式消息队列**:消息队列如RabbitMQ、Kafka、ActiveMQ等,用于解耦系统组件...

Global site tag (gtag.js) - Google Analytics