迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MongoDB >

MongoDB 中 ObjectId 和 $Oid 的区别

作者:迹忆客 最近更新:2023/04/20 浏览次数:

MongoDB 将所有数据记录存储在单独的 BSON 文档中。 提供标识符以唯一地标识每个文档。

标识符帮助用户在搜索其他文档时唯一地定位该文档。

借助标识符可以轻松进行查询,并相应地生成结果。

在每个集合中,每个文档都有一个唯一的 _id 字段作为其主键。 _id 默认格式是文档的 ObjectID。


ObjectID 的特点

ObjectID 充当特定集合中单个文档的标识符。 ObjectID 是一个 12 字节的 BSON 类型字段。

字段划分如下:

  1. 单个文档的 Unix 时间戳由前四个字节表示。
  2. 当前运行MongoDB服务器的机器ID由以下三个字节表示。
  3. 进程 ID 由接下来的两个字节表示。
  4. 为了增加 ObjectID,保留最后三个字节。

ObjectID 的格式

可以在创建文档时定义 ObjectID。 有两种方法可以将 ObjectID 分配给文档。

  1. 创建后,用户将 ObjectID 分配给文档本身。
  2. 该文档采用 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 的示例。 假设以下实体:

  1. 数据库名称:officedb
  2. 集合名称: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 的概念。 如下所述,每种方法都有不同的功能。

  1. str 方法:这用于获取十六进制字符串格式的对象 ID。
  2. ObjectId.getTimestamp() 方法将对象的时间戳部分作为日期返回。
  3. ObjectId.valueOf() 方法:此方法返回给定字符串文字的十六进制格式。
  4. ObjectId.toString() 方法:此方法以 JavaScript 表示的字符串格式返回对象 ID。

总结

探索 MongoDB 服务器中的 ObjectID 和 $oid 的空间很大。 除了表示形式之外,两者之间没有太大区别。

一些 shell 使用 ObjectID,而其他 shell 使用 $oid。 因此,数据操作和存储取决于您设备上安装的 shell 版本。

对于文档及其 ID 的定义,请使用 ObjectID。 另一方面,在编写和运行查询时,使用 $oid 搜索整个集合以找到所需的文档。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 MongoDB Shell 中列出所有数据库

发布时间:2023/05/11 浏览次数:180 分类:MongoDB

交互式 Mongo Shell 提供了多个用于获取数据的选项。 本文介绍了在 Mongo Shell 中列出数据库的几种不同方法。

MongoDB 中检查字段包含的字符串

发布时间:2023/05/11 浏览次数:1024 分类:MongoDB

这篇文章解决了如何在 MongoDB 中使用正则表达式来确定字段是否包含字符串。在 MongoDB 中使用正则表达式 正则表达式 (regex) 是定义搜索模式的文本字符串。

在 MongoDB 中 upsert 更新插入

发布时间:2023/05/11 浏览次数:214 分类:MongoDB

在 MongoDB 中,upsert 结合了更新和插入命令。 它可以在 update() 和 findAndModify() 操作中使用。MongoDB 中的 upsert 查询 upsert 采用单个布尔参数。

如何卸载 MongoDB

发布时间:2023/05/11 浏览次数:745 分类:MongoDB

要从您的计算机中卸载 MongoDB,您必须先删除 MongoDB 服务、数据库和日志文件。使用这篇 MongoDB 文章,您将能够从 Ubuntu Linux、Mac 和 Windows 卸载 MongoDB。 请务必保留数据备份,因为一旦卸载,便

在 MongoDB 中存储日期和时间

发布时间:2023/05/11 浏览次数:762 分类:MongoDB

本 MongoDB 教程解释了 Date() 对象是什么以及如何使用 Date() 方法对集合进行排序。 这也将帮助您找到在 MongoDB 中显示和存储日期/时间的最佳方法。

MongoDB 按 ID 查找

发布时间:2023/05/11 浏览次数:1856 分类:MongoDB

MongoDB 中的 find by Id() 函数用于获取与用户提供的 id 相匹配的文档。 如果找不到与指定 ID 匹配的文档,则返回空值。

检查 MongoDB 服务器是否正在运行

发布时间:2023/05/11 浏览次数:247 分类:MongoDB

这篇 MongoDB 教程将告诉您如何检查是否安装了 MongoDB 以及安装的 MongoDB 服务器的版本。 它在 Windows、UBUNTU 和 MAC 等不同的操作系统中实现。

MongoDB 中的分页

发布时间:2023/05/11 浏览次数:174 分类:MongoDB

这篇文章将介绍什么是 MongoDB 中的分页。 为什么在 MongoDB 中需要分页以及在 MongoDB 中完成分页的不同方法或方式是什么。

MongoDB 从查询开始

发布时间:2023/05/11 浏览次数:186 分类:MongoDB

在这篇 MongoDB 文章中,用户将学习如何使用 $regex 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便