MongoDB 中 ObjectId 和 $Oid 的区别
MongoDB 将所有数据记录存储在单独的 BSON 文档中。 提供标识符以唯一地标识每个文档。
标识符帮助用户在搜索其他文档时唯一地定位该文档。
借助标识符可以轻松进行查询,并相应地生成结果。
在每个集合中,每个文档都有一个唯一的 _id
字段作为其主键。 _id
默认格式是文档的 ObjectID。
ObjectID 的特点
ObjectID 充当特定集合中单个文档的标识符。 ObjectID 是一个 12 字节的 BSON 类型字段。
字段划分如下:
- 单个文档的 Unix 时间戳由前四个字节表示。
- 当前运行MongoDB服务器的机器ID由以下三个字节表示。
- 进程 ID 由接下来的两个字节表示。
- 为了增加 ObjectID,保留最后三个字节。
ObjectID 的格式
可以在创建文档时定义 ObjectID。 有两种方法可以将 ObjectID 分配给文档。
- 创建后,用户将 ObjectID 分配给文档本身。
- 该文档采用 MongoDB 服务器分配给它的默认 ObjectID。
ObjectID 以下列格式定义:
ObjectId(<hexadecimal>)
用于定义 ObjectID 的 <hexadecimal>
参数是可选的。 如果用户在 _id
字段中定义了一个值,则该值将作为 ObjectID 分配给文档。
否则,MongoDB 服务器会为文档提供一个 ID。
MongoDB 中 ObjectID 和 $oid 的区别
MongoDB 服务器中的 ObjectID 和 $oid 之间没有区别。 这两者只是新 shell 引入的不同序列化格式。
对象 ID 在 MongoDB 服务器的 $oid 帮助下表示。 服务器使用 Strict MongoDB Extended JSON; 因此,对象 ID 表示如下:
{ "$oid": "<id>" }
如上所示,搜索特定文档时可以使用 $oid 术语。 您可以在编写查询时使用 $oid。
另一方面,ObjectID 可用于创建文档。 此外,可以使用ObjectID 的方法从12 字节长的Object ID 中获取特定的值。
总之,这两个实体在MongoDB服务器中并没有太大区别。
使用 ObjectID 在集合中插入文档
如前一节所述,ObjectID 字段采用可选的十六进制参数。 如果在创建文档时没有为 _id
字段设置值,MongoDB 服务器会为集合中的文档设置一个默认的唯一值。
在集合中插入单个文档的语法如下:
db.collectionName.insertOne()
该代码片段在集合中插入一个文档,其 _id
字段中的默认值由服务器设置。
在集合中插入多个文档的语法如下:
db.collectionName.insertMany()
该代码片段在集合中插入多个文档,并在服务器设置的 _id
字段中使用默认值。
设置 ObjectID 字段
用户可以在创建文档时设置 _id
字段,因为它是唯一的。 设置 ObjectID 或 $oid 的语法如下:
db.collectionname.insertOne({"_id":"1789473"})
下面是在集合中设置文档的 ObjectID 的示例。 假设以下实体:
- 数据库名称:officedb
- 集合名称:employee_officedb
使用以下命令在 MongoDB 服务器中创建文档:
> use officedb
switched to db officedb
> db.createCollection("employee_officedb")
{ "ok" : 1 }
> db.employee_officedb.insert({ name : "asad", rank : 23})
WriteResult ({ "nInserted" : 1})
> db.employee_officedb.find().pretty()
{
"_id" : ObjectId ("8e12bn2a0ty562888ab93711"),
"name" : "asad"
"rank" : 23
}
ObjectID 的方法
四种方法扩展了 MongoDB 中 ObjectID 的概念。 如下所述,每种方法都有不同的功能。
- str 方法:这用于获取十六进制字符串格式的对象 ID。
- ObjectId.getTimestamp() 方法将对象的时间戳部分作为日期返回。
- ObjectId.valueOf() 方法:此方法返回给定字符串文字的十六进制格式。
- ObjectId.toString() 方法:此方法以 JavaScript 表示的字符串格式返回对象 ID。
总结
探索 MongoDB 服务器中的 ObjectID 和 $oid 的空间很大。 除了表示形式之外,两者之间没有太大区别。
一些 shell 使用 ObjectID,而其他 shell 使用 $oid。 因此,数据操作和存储取决于您设备上安装的 shell 版本。
对于文档及其 ID 的定义,请使用 ObjectID。 另一方面,在编写和运行查询时,使用 $oid 搜索整个集合以找到所需的文档。
相关文章
比较 MongoDB 中的字段
发布时间:2023/04/21 浏览次数:51 分类:MongoDB
-
在本文中,我们将了解如何比较 MongoDB 中的两个字段。 此外,我们将看到一个相关的示例和解释,以使主题更容易理解。
清除或删除 MongoDB 中的集合
发布时间:2023/04/21 浏览次数:147 分类:MongoDB
-
本篇文章将告诉大家如何删除 MongoDB 数据库中的集合以及删除 MongoDB 中的集合的不同方法。
向 MongoDB 集合中的每个文档添加新字段
发布时间:2023/04/21 浏览次数:107 分类:MongoDB
-
您将在这篇文章中了解 $set 和 $setOnInsert 操作。 此外,利用这两个运算符,快速描述了向 MongoDB 中的集合添加字段的挑战。
MongoDB 截断集合
发布时间:2023/04/21 浏览次数:178 分类:MongoDB
-
可以根据需要选择两个选项之一来截断下面的集合。 在今天的文章中,我们将学习如何在 MongoDB 中截断集合。
删除 MongoDB 中的重复项
发布时间:2023/04/21 浏览次数:151 分类:MongoDB
-
在本文中,我们将了解如何删除 MongoDB 中的重复条目,并且我们还将看到一个带有适当解释的示例,以使主题更容易理解。
使用 NodeJS 检查 MongoDB 中是否存在集合
发布时间:2023/04/21 浏览次数:194 分类:MongoDB
-
在本文中,我们将检查 MongoDB 数据库中是否存在一个集合,并且我们还将查看与主题相关的示例,以使主题更容易理解。 为此,我们将使用 Node.js。
MongoDB 中的唯一索引
发布时间:2023/04/21 浏览次数:144 分类:MongoDB
-
在这篇教学文章中,您将了解唯一索引、它们是什么以及如何在 MongoDB 中使索引唯一。 此外,还简要详细地解释了使用户的电子邮件在 MongoDB 中唯一。
在 MongoDB 中创建索引
发布时间:2023/04/21 浏览次数:104 分类:MongoDB
-
索引有助于有效解决查询。 如果没有索引,MongoDB 必须遍历集合中的每个文档才能找到与查询匹配的文档。因此,在今天的文章中,我们将学习如何在 MongoDB 中创建索引。
MongoDB 中的稀疏索引
发布时间:2023/04/21 浏览次数:142 分类:MongoDB
-
在本文中,我们将讨论 MongoDB 中的稀疏索引。 此外,我们将提供一个相关示例并进行解释,以使该主题更容易理解。