MongoDB教程(十七):MongoDB主键类型ObjectId

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!

文章目录

      • 引言
      • 一、ObjectId的内部结构
      • 二、ObjectId的生成
        • 生成示例
      • 三、ObjectId的解析与操作
        • 解析示例
      • 四、使用ObjectId进行文档操作
        • 插入文档
        • 查询文档
      • 五、ObjectId与时间戳
        • 获取创建时间
      • 六、结论

引言

在MongoDB中,ObjectId是文档的主键类型,用于唯一标识每个文档。它不仅提供了全局唯一性,而且在生成和解析方面有着独特的设计。本文将深入探讨ObjectId的内部结构、生成机制、以及如何在MongoDB中使用ObjectId进行文档操作,通过具体案例代码展示每一个细节。

一、ObjectId的内部结构

ObjectId是一个12字节的BSON类型,由以下四个部分组成:

  1. 时间戳(4字节):记录ObjectId创建时的时间,单位为秒。
  2. 机器标识符(3字节):表示生成ObjectId的机器,前两字节是网络字节序的机器ID,后一字节是进程ID。
  3. 计数器(2字节):每次在同一台机器同一进程中生成新的ObjectId时,计数器会递增。
  4. 随机数(3字节):增加随机性,降低冲突概率。

二、ObjectId的生成

ObjectId的生成不需要与数据库交互,可以在客户端生成,这使得文档的插入操作更加高效。

生成示例
from bson.objectid import ObjectId# 生成一个ObjectId
oid = ObjectId()# 输出生成的ObjectId
print(oid)

三、ObjectId的解析与操作

ObjectId可以被转换为字符串形式,便于在网络上传输或存储在数据库中。同时,也可以从字符串形式解析回ObjectId对象。

解析示例
from bson.objectid import ObjectId# 从字符串解析ObjectId
oid_str = "507f1f77bcf86cd799439011"
oid = ObjectId(oid_str)# 输出解析后的ObjectId
print(oid)

四、使用ObjectId进行文档操作

在MongoDB中,ObjectId通常作为文档的_id字段,用于唯一标识每个文档。

插入文档
from pymongo import MongoClient
from bson.objectid import ObjectId# 连接MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['test_db']
collection = db['test_collection']# 插入文档,_id字段使用ObjectId
doc = {"_id": ObjectId(),"name": "John Doe","age": 30
}
result = collection.insert_one(doc)# 输出插入的文档的_id
print(result.inserted_id)
查询文档
from pymongo import MongoClient
from bson.objectid import ObjectId# 连接MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['test_db']
collection = db['test_collection']# 根据ObjectId查询文档
oid = ObjectId("507f1f77bcf86cd799439011")
doc = collection.find_one({"_id": oid})# 输出查询结果
print(doc)

五、ObjectId与时间戳

ObjectId的时间戳部分可以用来获取文档的大致创建时间。

获取创建时间
from pymongo import MongoClient
from bson.objectid import ObjectId
from datetime import datetime# 连接MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['test_db']
collection = db['test_collection']# 根据ObjectId获取文档
oid = ObjectId("507f1f77bcf86cd799439011")
doc = collection.find_one({"_id": oid})# 输出文档的创建时间
print(datetime.fromtimestamp(oid.generation_time))

六、结论

ObjectId是MongoDB中不可或缺的一部分,它为文档提供了全局唯一标识符,同时也包含了时间戳信息,便于文档的管理和时间相关操作。在实际开发中,合理利用ObjectId的特性,可以提高数据操作的效率和准确性,为构建高性能的MongoDB应用打下坚实的基础。


喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【MongoDB系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

MongoDB相关文章索引文章链接
MongoDB教程(一):Linux系统安装mongoDB详细教程MongoDB教程(一):Linux系统安装mongoDB详细教程
MongoDB教程(二):mongoDB引用shellMongoDB教程(二):mongoDB引用shell
MongoDB教程(三):mongoDB用户管理MongoDB教程(三):mongoDB用户管理
MongoDB教程(四):mongoDB索引MongoDB教程(四):mongoDB索引
MongoDB教程(五):mongoDB聚合框架MongoDB教程(五):mongoDB聚合框架
MongoDB教程(六):mongoDB复制副本集MongoDB教程(六):mongoDB复制副本集
MongoDB教程(七):mongoDB分片MongoDB教程(七):mongoDB分片
MongoDB教程(八):mongoDB数据备份与恢复MongoDB教程(八):mongoDB数据备份与恢复
MongoDB教程(九):java集成mongoDBMongoDB教程(九):java集成mongoDB
MongoDB教程(十):Python集成mongoDBMongoDB教程(十):Python集成mongoDB
MongoDB教程(十一):MongoDB关系管理与文档关联MongoDB教程(十一):MongoDB关系管理与文档关联
MongoDB教程(十二):MongoDB数据库索引MongoDB教程(十二):MongoDB数据库索引
MongoDB教程(十四):MongoDB查询分析MongoDB教程(十四):MongoDB查询分析
MongoDB教程(十五):MongoDB原子操作MongoDB教程(十五):MongoDB原子操作
MongoDB教程(十六):MongoDB高级索引MongoDB教程(十六):MongoDB高级索引

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【状态机动态规划 状态压缩】1434. 每个人戴不同帽子的方案数

本文涉及知识点 位运算、状态压缩、枚举子集汇总 动态规划汇总 LeetCode 1434. 每个人戴不同帽子的方案数 总共有 n 个人和 40 种不同的帽子,帽子编号从 1 到 40 。 给你一个整数列表的列表 hats ,其中 hats[i] 是第 i 个人所有喜欢帽子的列表。 请你…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日,经欧拉生态创新中心和华为技术有限公司测评,建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统,完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920(Taisha 200)的兼容性…

ASP.NET MVC

ASP.NET MVC与.NET Framework关系 .NET Framework是一个庞大的代码库,能为多种编程语言提供支持(如C#、VB、F#等)。同时.NET Framework 提供了多种技术框架,ASP.NET MVC是.NET Framework提供的众多技术框架中的一种,用于开发Web应用。 .NET …

B端:小小详情页蕴藏大学问,附大量案例 。

在B端(Business-to-Business,即企业与企业之间的商业模式)的设计中,详情页是一个非常重要的环节。虽然它可能看起来只是一个简单的页面,但实际上其中蕴藏着许多大学问。 用户需求与体验: 在B端设计中&…

【Docker】Docker-consul容器服务自动发现与注册

目录 一.Consul概述 1.解决了什么问题 2.什么叫微服务或者注册与发现 3.consul的模式 4.相关命令 二.consul 部署 1.consul服务器部署 2.部署docker容器 3.Nginx负载均衡器 3.1.安装启动nginx 3.2.配置nginx负载均衡 3.3.创建配置consul complate模板文件 3.4.添加…

基于Qt的上位机通用框架

0.前言 最近一年多的时间一直在开发设备控制相关的软件,加上之前在聚光的两年时间,前前后后开发这种设备控制类型的上位机软件也有三年的时间了。总结出了一套基于Qt的上位机编程框架,核心思想类似于C#的依赖注入,对象的初始化都…

JavaScript青少年简明教程:流程控制语句

JavaScript青少年简明教程:流程控制语句 JavaScript 提供了一系列的流程控制语句,用于控制代码的执行顺序。 条件语句 条件语句根据表达式的真假来执行不同的代码块。 if 语句 用于在条件为真时执行代码块。 语法: if(条件){ 条件满足执…

微信小程序获取蓝牙并实现内容打印

通过微信小程序如何实现获取蓝牙打印机并实现打印能力&#xff0c;之前做过一个测试Dome&#xff0c;能够获取附近的蓝牙打印机设备并实现打印,今天开放出来供大家参考。 wxml <!--右下角搜索--> <view class"ly-cass-box"><view class"ly-cas…

Hadoop、HDFS、MapReduce 大数据解决方案

本心、输入输出、结果 文章目录 Hadoop、HDFS、MapReduce 大数据解决方案前言HadoopHadoop 主要组件的Web UI端口和一些基本信息MapReduceMapReduce的核心思想MapReduce的工作流程MapReduce的优缺点Hadoop、HDFS、MapReduce 大数据解决方案 编辑 | 简简单单 Online zuozuo 地址…

广义线性模型(1)广义线性模型详解

一 GLM概述 广义线性模型&#xff08;Generalized Linear Models&#xff0c;GLM&#xff09;由 Nelder 和 Wedderburn 于 1972年提出和发表 &#xff0c;旨在解决普通线性回归模型无法处理因变量离散&#xff0c;并发展能够解决非正态因变量的回归建模任务的建模方法。 在广…

数据结构:二叉搜索树(简单C++代码实现)

目录 前言 1. 二叉搜索树的概念 2. 二叉搜索树的实现 2.1 二叉树的结构 2.2 二叉树查找 2.3 二叉树的插入和中序遍历 2.4 二叉树的删除 3. 二叉搜索树的应用 3.1 KV模型实现 3.2 应用 4. 二叉搜索树分析 总结 前言 本文将深入探讨二叉搜索树这一重要的数据结构。二…

【PyTorch】单目标检测项目

对象检测是在图像中查找特定对象位置的过程,用于处理单对象或多对象检测问题。单对象检测在给定图像中仅定位一个对象。对象的位置可以通过边界框定义。单对象检测使用四个数字预测边界框。对于正方形物体&#xff0c;可以固定宽度和高度&#xff0c;并简化问题以仅预测两个数字…

Unity:PC包直接查看Log日志

PC端会输出Log日志&#xff0c;位置在&#xff1a; C:\Users\用户名\AppData\LocalLow\公司名\项目名 在这里可以找到类似的文件&#xff1a; 打开便可以看到打印。

解决 elementUI 组件在 WebStorm 中显示为未知标签的问题

解决 elementUI 组件在 WebStorm 中显示为未知标签的问题 一、问题 自从转到 ts 之后&#xff0c;编辑器就一直提示用到的 elementUI 标签未知&#xff0c;一直显示一溜黄色警示&#xff0c;很烦&#xff1a; 二、解决 把它改成大写就可以了。 如下&#xff1a; 把整个项目…

springboot实战(十二)之通过注解的方式记录接口出入参log入库

前言 生产过程中&#xff0c;为了更好的辅助线上问题排查避免不了对接口出入参进行日志输出的时候&#xff0c;并且为了分析接口数据效果需要将每次请求接口的出入参进行落库方便后续的数据分析&#xff0c;这时总不能每个接口入参之后、出参之前都打印一遍日志吧&#xff1f;如…

51单片机嵌入式开发:16、STC89C52RC 嵌入式之 步进电机28BYJ48、四拍八拍操作

STC89C52RC 嵌入式之 步进电机28BYJ48、四拍八拍操作 STC89C52RC 之 步进电机28BYJ48操作1 概述1.1 步进电机概述1.2 28BYJ48概述 2 步进电机工作原理2.1 基本原理2.2 28BYJ48工作原理2.3 28BYJ48控制原理 3 电路及软件代码实现4 步进电机市场价值 STC89C52RC 之 步进电机28BYJ…

使用约束布局该如何设置哪个视图(UILabel)的内容优先被压缩?

引言 在实际项目开发中&#xff0c;约束布局给我们带来了很大的便利&#xff0c;可以帮助我们创建灵活且响应迅速的用户界面。通常情况下&#xff0c;它都能很好地工作&#xff0c;但在一些包含许多UILabel的场景中&#xff0c;比如会话列表的UI&#xff0c;哪个视图会被优先压…

《0基础》学习Python——第二十讲__网络爬虫/<3>

一、用post请求爬取网页 同样与上一节课的get强求的内容差不多&#xff0c;即将requests.get(url,headershead)代码更换成requests.post(url,headershead),其余的即打印获取的内容&#xff0c;如果content-typejson类型的&#xff0c;打印上述代码的请求&#xff0c;则用一个命…

2024论文精读:利用大语言模型(GPT)增强上下文学习去做关系抽取任务

文章目录 1. 前置知识2. 文章通过什么来引出他要解决的问题3. 作者通过什么提出RE任务存在上面所提出的那几个问题3.1 问题一&#xff1a;ICL检索到的**示范**中实体个关系的相关性很低。3.2 问题二&#xff1a;示范中缺乏解释输入-标签映射导致ICL效果不佳。 4. 作者为了解决上…

【Git】(基础篇七)—— IntelliJIDEA集成Git

InteliJ IDEA集成Git 现在有很多的集成工具帮助我们写代码&#xff0c;使用这些工具可以帮助我们加速写代码&#xff0c;很多工具也可以集成git&#xff0c;使用图形工具管理git&#xff0c;相信了解了底层运行逻辑的你能够很快地上手使用这些工具&#xff0c;本文以InteliJ I…