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

news2024/11/25 14:57:57

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

文章目录

      • 引言
      • 一、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.coloradmin.cn/o/1941679.html

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

相关文章

共享充电桩语音ic方案,展现它的“说话”的能力

随着电动汽车的普及,充电设施的便捷性、智能化需求日益凸显,共享充电桩语音IC应运而生,成为连接人与机器、实现智能交互的桥梁。本文将为大家介绍共享充电桩语音ic的概述、应用词条以及优势,希望能够帮助您。 一、NV170D语音ic概述…

(laya)地图缩放保持视口点不变算法

文章目录 结论视口中心保持不变【未化简过程】(代码选中部分为x方向的计算)部分解析 结论 视口中心点保持不变 scl:新的缩放比 x:缩放为1时的偏移坐标 stHalfW:舞台半宽 视口左上角点保持不变 去掉 stHalfW即可 视…

探索NVM:让Node.js开发如虎添翼的利器

文章目录 前言一、NVM简介:版本管理的瑞士军刀二、NVM能解决什么问题?三、如何使用NVM​?总结 前言 在这个日新月异的编程世界里,Node.js凭借其高效的非阻塞I/O操作和轻量级的事件驱动模型,成为了全栈开发、微服务架构…

Linux之基础IO(上)

目录 库函数文件操作 写文件 读文件 系统调用文件操作 写文件 读文件 文件描述符fd 深刻理解linux下一切皆文件 重定向原理 在c语言中我们学习了fopen,fread,fwrite接口,用于进行文件相关的操作,在之前我们学习了计算…

站在资本投资领域如何看待分布式光纤传感行业?

近年来,资本投资领域对于分布式光纤传感行业并不十分敏感。这主要是由于分布式光纤传感技术是一个专业且小众的领域,其生命周期相对较长,缺乏爆发性,与消费品或商业模式创新产业有所不同。此外,国内的投资环境也是影响…

webStorm 实时模板笔记

文章目录 1、单斜杠效果 2、双斜杠效果 3、控制台打印效果 1、单斜杠 /** $END$ */效果 2、双斜杠 /*** $END$* author Ikun* since $DATE$ $TIME$ */DATE date() ✔ TIME time() ✔效果 3、控制台打印 console.log("███████$EXPR_COPY$>>>>&a…

040403数据选择器比较器运算电路

数据选择器&比较器&运算电路 4.4.3数据选择器0.数据选择器的定义与功能1.4选1数据选择器2.集成电路数据选择器利用8选1数据选择器组成函数产生器的一般步骤 4.4.4 数值比较器1.1位数值比较器2.2位数值比较器3.集成数值比较器4.集成数值比较器的位数扩展 4.4.5算术运算电…

时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法(CPO)优化VMD二次分解

时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法(CPO)优化VMD二次分解 目录 时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法(CPO)优化VMD二次分解效果一览基本介绍程序设计参考资料 效果一览…

嵌入式linux学习的每一步具体要掌握什么?

嵌入式Linux是一门综合性很强的学科,涉及到操作系统、硬件、驱动程序、应用开发等多个方面。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学&#…

【python基础知识】整除

熟练使用你所常用的开发语言是一个非常基本的要求。如果你日常需要使用Python,但是你对向上取整,向下取整,以及Python中的默认实现方式是什么都不知道的话,那么我就需要怀疑你的专业能力了。 1. 整除 讲解这个整除的知识&#xf…

JAVA毕业设计152—基于Java+Springboot+vue+小程序的个人健康管理系统小程序(源代码+数据库+15000字论文)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue小程序的个人健康管理系统小程序(源代码数据库15000字论文)152 一、系统介绍 本项目前后端分离带小程序(可以改为ssm版本),分为用户、管理员两种…

图片转换之heic转jpg(使用ImageMagick)

缘由:iphone的图库,用jpg拍照保存后内存占比较大,heic格式会微缩不少。问题来了,电脑不能直接小图预览heic。 分析:现在就是解决小图预览的问题(大图用wps可以看) 解决:查找了一些…

《0基础》学习Python——第二十二讲__网络爬虫/<5>爬取豆瓣电影封面图

一、爬取豆瓣电影的图片封面 1、经过上节课我们所爬取的豆瓣电影的电影名、年份、国家、导演、主演、剧情,那么接下来我们将学习如何去爬取这些电影的图片,并将这些图片存放在文件夹中。 2、过程实现: 2.1、获取网页源码 首先还是和爬取电影名…

Java之 jvm

jvm之管理内存 程序计数器:当前线程所执行的字节码的行号指示器。程序计数器是唯一一个不会出现 OutOfMemoryError 的内存区域,它的生命周期随着线程的创建而创建,随着线程的结束而死亡。Java虚拟机栈 方法调用 一个方法调用都会有对应的栈帧…

【如何在Jenkins的从节点切换NPM镜像源查看和切换】

【问题】 Jenkins打包时,前端npm构建时很慢,所有需要更换镜像源 【自查】 找到Jenkins从节点上的nodejs安装的路径,进入bin目录 执行./npm -v查看是不能正常查看, [rootlocalhost bin]# ./npm -v /usr/bin/env: ‘node’: No su…

华为OD机试2024年C卷D卷 - 山脉的个数/攀登者1 (Java)

华为OD机试(C卷D卷)2024真题目录 题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如&#xff…

MySQL面试篇章——MySQL核心SQL(基本语法)

文章目录 结构化查询语句SQL库操作表操作CURD 操作insert 增加update 修改delete 删除 select 查询去重 distinct空值查询union 合并查询带 in 子查询分页查询排序 order by分组 group by笔试实践题 连接查询内连接查询外连接查询左连接查询右连接查询 结构化查询语句SQL SQL是…

内置对象的原型继承

Object.prototype(原型链顶部) console.log(ItShare.__proto__); console.log(ItShare.__proto__.__proto__); console.log(ItShare.__proto__.__proto__.__proto__);那么数组的原型链是什么呢? const arr [1, 2, 5, 4, 55, 66, 54]; cons…

matlab2018b安装

1.可先参考这个 2.激活 按上面教程安装后,打开matlab 可能会出现软件激活这个界面,需要按如下步骤进行操作。

Android Studio 中使用switch语句时报错Constant expression required

发现问题 Android Studio 中使用switch语句时报错Constant expression required 解决方法: 首先, 在gradle.properties配置文件下添加代码: android.nonFinalResIdsfalse之后, 点击:“Sync Now” 进行同步 效果 原…