`

MongoDB中的_id和ObjectId

 
阅读更多

MongoDB中存储的文档必须要有一个_id键,这个键的值可以是任何类型的,默认为ObjectId。

在每个文档里面,_id值是唯一的,这样可以确保在一个集合里每个文档可以被唯一标识。如果是两个集合的话,在不同的集合里文档的_id是可以相同的。

 

MongoDB为什么要使用ObjectId,而不使用自动增加的主键等其他的常规的方式?

MongoDB从一开始就设计用来做分布式数据库,处理多个节点是核心的要求。ObjectId被设计成轻量型的,不同的机器都能够用全局的唯一的方法生成ObjectId。

 

ObjectId采用12个字节的存储空间,每个字节2位16进制的数字,组成一个24位的字符串,ObjectId的创建方式如下:

 
1.前4个字节是从标准纪元开始的时间戳,单位为妙。由于时间戳在前,所以ObjectId会大致按照插入的书序排序。而且这四个字节隐含了文档的创建时间,大多数驱动都会提供方法从ObjectId中获取文档创建时间。

2.接下来的3个字节是主机的唯一标识。通常是主机名的散列值,这样可以保证不同机器产生的ObjectId不会冲突。

3.8,9两个字节表示产生ObjectId的进程表示符。这是为了确保在同一台机器上并发的多个进程产生的ObjectId是唯一的。

4.最后三个字节是自动增加的计数器,表示同一个进程同一秒产生的ObjectId也是不一样的。

 

ObjectId在客户端生由驱动生成,这体现了MongoDB的设计理念:能从服务器端转移到驱动程序来做的就尽量转移。因为扩展应用层比扩展数据库层要容易的多,将事务交由客户端来处理可以减轻数据库扩展的负担。

 

 


 

 

  • 大小: 3 KB
分享到:
评论

相关推荐

    python将MongoDB里的ObjectId转换为时间戳的方法

    MongoDB里的_id字段前四位是时间戳的16进制表示,通过Python可以很容易从_id中提取出时间戳来 def timestamp_from_objectid(objectid): result = 0 try: result = time.mktime(objectid.generation_time.time...

    mongoDB文件存储_java_MongoDB_

    在Java开发中,MongoDB常被用于处理结构化和半结构化的数据。本篇文章将深入探讨MongoDB如何进行文件存储,特别是针对大文件的处理。 首先,MongoDB提供了GridFS(Grid File System)规范,这是一个用于存储和检索...

    python操作mongodb根据_id查询数据的实现方法

    在MongoDB中,每个文档都有一个默认的、唯一的_id字段,通常由MongoDB自动生成,其类型为ObjectId。ObjectId由12字节组成,包含时间戳、机器标识符、进程ID和随机数,确保其全局唯一性。 在Python中,如果你想要...

    python根据时间生成mongodb的ObjectId的方法

    mongodb的_id为ObjectId类型,ObjectId内是包含时间戳信息的,这样我们在保存数据的时候就不需要再单独记录一个添加时间了,如果需要按照时间查询,我们可以先把时间变化成可查询的ObjectId,再通过_id字段查询,...

    MongoDB插入文档与ObjectID操作.pdf

    1. **_id 字段**:在 MongoDB 中,每个文档都必须有一个 `_id` 字段,它通常是自动创建的,可以是系统生成的 ObjectId,也可以由用户手动设置。ObjectId 是一种特殊的数据类型,由12字节组成,用于确保文档的唯一性...

    java查询mongodb中的objectid示例

    `ObjectId`是MongoDB中用于唯一标识文档的一种数据类型,通常作为每个文档的默认 `_id` 字段。本示例将详细解释如何使用Java来查询具有指定`ObjectId`的MongoDB文档。 首先,确保你的项目中已经添加了MongoDB的Java...

    mongodb_preview.pdf

    MongoDB中的每个文档都有一个唯一的主键_id字段,通常是用ObjectId()生成的。书中会通过示例来讲解如何设置_id字段。 查询和更新文档是MongoDB中常见的操作。find()方法用于查询文档,MongoDBCursor则用于处理查询...

    关于C#生成MongoDB中ObjectId的实现方法

    ObjectId介绍在MongoDB中,文档(document)在集合(collection)中的存储需要一个唯一的_id字段作为主键。这个_id默认使用ObjectId来定义,因为ObjectId定义的足够短小,并尽最大可能的保持唯一性,同时能被快速的...

    MongoDB的ObjectId.pdf

    在 MongoDB 中,每个文档都必须包含一个 `_id` 键,其值可以是任何类型,但默认是 ObjectId。这是因为 ObjectId 提供了一种简单而高效的方式来保证文档的唯一性,尤其是在分布式环境中,无需像传统关系型数据库那样...

    mongodb update操作符ppt

    在PPT中,可能会通过实例、最佳实践和注意事项来详细解释这些操作符的用法和效果,帮助读者深入理解如何有效利用MongoDB更新数据。对于开发者来说,熟练掌握这些操作符对于优化数据管理流程至关重要。

    PHP库 查询Mongodb中的文档ID的方法

    特别强调了如何构造`MongoDB\BSON\ObjectID`实例来处理MongoDB的`_id`字段,并通过`findOne`和`updateOne`方法来检索和更新特定文档。这些操作是开发中处理MongoDB文档常用的技术,对于使用PHP与MongoDB交互的开发...

    MongoDB ObjectId

    MongoDB ObjectId的设计巧妙地结合了时间戳、机器标识和进程信息,以及随机数,既确保了文档的唯一性,又简化了在分布式环境下的操作,是MongoDB数据库体系中的一个重要组成部分。在实际应用中,理解并合理利用...

    Mongodb + GridFS +Java 操作Mongodb中存储的文件

    总之,Java中的MongoDB GridFS API提供了强大且灵活的方式来存储和管理大型文件。通过以上步骤,你可以实现文件的上传、下载、查询和删除,为你的应用程序提供了高效的数据存储解决方案。在实际开发中,记得根据需求...

    前端开源库-meteor-mongo-id

    1. **MongoDB ObjectID**:MongoDB中的每个文档都有一个默认的_id字段,它是BSON(Binary JSON)类型的数据,通常由12字节的十六进制字符串表示,前4字节表示生成时间戳,中间4字节是机器标识,接着2字节是进程ID,...

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

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

    bson-objectid:在没有mongodb驱动程序或bson模块的情况下构造ObjectID

    该模块允许您创建和解析ObjectID而无需引用或模块。 目标是与所有的公共API实现100%兼容(可在此处找到: : )。 安装 $ npm install bson-objectid 用法 var ObjectID = require ( "bson-objectid" ) ; console ...

    MongoDB中文档的更新操作示例详解

    MongoDB 是一个流行的开源NoSQL数据库系统,以其灵活性和高性能而受到广泛的欢迎。在MongoDB中,文档是数据存储的基本单位,类似于关系型数据库中的行。本篇文章将深入探讨MongoDB中文档的更新操作,包括如何替换...

Global site tag (gtag.js) - Google Analytics