MongoDB中我们经常会接触到一个自动生成的字段:”_id”,类型为ObjectId。 本文详解ObjectId的构成和使用。...为此,MongoDB采用了一个称之为ObjectId的类型来做主键。ObjectId是一个12字节的 BSON 类型字符串。...MongoDB对ObjectId对象提供了getTimestamp()方法来获取ObjectId的时间。...") 根据时间构造ObjectId 上例是直接使用MongoDB提供的新建方法来构造ObjectId的,我们自己可不可以通过字符串来构造呢?...如何使用日期范围来查询ObjectId? 既然ObjectId是可以排序的,它当然也可以比较大小。
ObjectId的官方规范 1)Time 时间戳。将刚才生成的objectid的前4位进行提取“5e4fa350”,然后按照十六进制转为十进制,变为“1582277456”,这个数字就是一个时间戳。...上面的Machine是为了确保在不同机器产生的objectId不冲突,而pid就是为了在同一台机器不同的mongodb进程产生了objectId不冲突,接下来的“af71”两位就是产生objectId的进程标识符...前面的九个字节是保证了一秒内不同机器不同进程生成objectId不冲突,这后面的三个字节“5d6f62”是一个自动增加的计数器,用来确保在同一秒内产生的objectId也不会发现冲突,允许256的3次方等于...总的来看,objectId的前4个十六进制字符是时间戳,记录了文档创建的时间;接下来3个十六进制字符代表了所在主机的唯一标识符,确定了不同主机间产生不同的objectId;后2个是进程id,决定了在同一台机器下...,不同mongodb进程产生不同的objectId;最后通过3个是自增计数器,确保同一秒内产生objectId的唯一性。
=(ObjectId a, ObjectId b) => !...string(ObjectId objectId) => objectId.ToString(); public static implicit operator ObjectId(string...objectId) => new ObjectId(objectId); public static ObjectId Empty { get { return new ObjectId("000000000000000000000000...生产/解包 var sourceId = ObjectId.NewId(); var reverseId = new ObjectId(sourceId); ?...(); // 转换为 ObjectId ObjectId id = stringId; 隐式转换可以提高编码效率哟!
当查询集合中的文档时,可以看到该集合中每个文档的ObjectId。 如果要确保在创建集合时MongoDB不会创建_id字段,并且要指定自己的ID作为集合的_id,则需要在创建集合时明确定义它。
ObjectId is less than the second ObjectId....ObjectId is less than or equal to the second ObjectId....=(ObjectId lhs, ObjectId rhs) { return !...ObjectId is greather than or equal to the second ObjectId....ObjectId is greather than the second ObjectId.
官网中对 ObjectId 的规范有以下描述: MongoDB中的ObjectId规范 上面的这个图中,有一个重点信息。...上面的 Machine 是为了确保在不同机器产生的 ObjectId 不冲突,而 pid 就是为了在同一台机器不同的 mongodb 进程中产生的 ObjectId 不冲突。...前面的九个字节是保证了一秒内不同机器不同进程生成 ObjectId 不冲突,最后面的这三个字节9fa835是一个自动增加的计数器,用来确保在同一秒内产生的 ObjectId 也不会发生冲突,允许 256...或者让客户端产生 ObjectId(客户端生成 ObjectId 我们后面再单独来讨论)。...id,决定了在同一台机器下,不同 mongodb 进程产生不同的 ObjectId;最后通过 3 个字节的自增计数器,确保同一秒内产生 ObjectId 的唯一性。
最近开发反馈sentry遇到mongodb写入报 objectid 重复的情况,类似下图: ?...我们生产用的是mongo3.4的版本 官方文档介绍3.4的 objectid生成规则如下: https://docs.mongodb.com/v3.4/reference/method/ObjectId...只有最后的counter段有差异,生产上如果我们写入并发比较高,还是会出现objectid冲突的情况发生的。...附带,mongodb3.2的objectid生成规则(和3.4版本不同): https://docs.mongodb.com/v3.2/reference/method/ObjectId/ a 4-byte...参考: https://blog.wolfogre.com/posts/mongo-objectid-design/
原文地址: https://blog.wolfogre.com/posts/mongo-objectid-design/ 关于 ObjectId 这里就不费舌介绍了,使用过 MongoDB 的同学都应该了解...ObjectId 的文章,且在介绍这 12 个字节的含义时,常放出这张图: ?...var processUnique = processUniqueBytes()// New generates a new ObjectID.func New() ObjectID { var b [...看到这里,相信你也反应过来了:官方修改了 ObjectId 的设计。...所以,这里我主观臆测一下修改 ObjectId 设计的原因,不供参考。
-- --> mongoDB中的ObjectId是什么东西? 说前一次课咱们讲到要删除一条记录,之前我想过自己维护一个留言id的对象,里面保存所有留言的id列表。...首先,ObjectId,这个东西它是一个字段 ,我在网上查资料说,它是由12个字节组成的字符串。...-- --> 说了半天,具体怎么生成ObjectId呢? 就这样,希望对同学们有帮助。 然后,相关的学习笔记和代码我都已经上传到QQ群,请同学们自己下载查看。
sample: { size: N } } ] ) N为条数 例如返回5条: > db.test.aggregate( [ { $sample: { size: 5 } } ] ) { "_id" : ObjectId..." : "chenfeng" } { "_id" : ObjectId("5d1c7240df7032c6c7966207"), "id" : 88223, "name" : "chenfeng" }..." } { "_id" : ObjectId("5d1c5c8239ab0f9fbcdc5229"), "id" : 295906, "name" : "chenfeng" } { "_id" : ObjectId..." : ObjectId("5d1c6de8df7032c6c794a42a"), "id" : 74082, "name" : "chenfeng" } { "_id" : ObjectId("5d1c6dfddf7032c6c794eecf..." } { "_id" : ObjectId("5d1c5c0639ab0f9fbcdaed91"), "id" : 204618, "name" : "chenfeng" } { "_id" : ObjectId
"), "number" : 4 } { "_id" : ObjectId("5fb4e78beebfcce3b111d99e"), "number" : 5 } { "_id" : ObjectId(..."), "number" : 9 } { "_id" : ObjectId("5fb4e78beebfcce3b111d9a3"), "number" : 10 } { "_id" : ObjectId..."), "number" : 14 } { "_id" : ObjectId("5fb4e78beebfcce3b111d9a8"), "number" : 15 } { "_id" : ObjectId..."), "number" : 4 } { "_id" : ObjectId("5fb50645eebfcce3b111e556"), "number" : 5 } { "_id" : ObjectId(..."), "number" : 18 } { "_id" : ObjectId("5fb50645eebfcce3b111e565"), "number" : 20 } { "_id" : ObjectId
"test4" } { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } { "_id" : ObjectId..."test3" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId..."test3" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId..."test3" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId..."test4" } { "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" } { "_id" : ObjectId
ObjectID简介 mongo存储的数据在没有特别指定_id数据类型时,默认类型为ObjectID ‘_id’: ObjectId(‘55717c9eb2c983c127000000’)...class bson.objectid.ObjectId(oid=None) Initialize a new ObjectId....从ObjectID生成时间对象 from bson.objectid import ObjectId a = ObjectId('55717c9eb2c983c127000000') a.generation_time.timetuple...) >>> ObjectId(b'foo-bar-quux') ObjectId('666f6f2d6261722d71757578') >>> ObjectId('0123456789ab0123456789ab...') ObjectId('0123456789ab0123456789ab')
"_id" : ObjectId("600ee22fb97bfefc365ec211"), "number" : 76 } { "_id" : ObjectId("600ee22fb97bfefc365ec212..."), "number" : 77 } { "_id" : ObjectId("600ee22fb97bfefc365ec213"), "number" : 78 } { "_id" : ObjectId..."), "number" : 82 } { "_id" : ObjectId("600ee22fb97bfefc365ec218"), "number" : 83 } { "_id" : ObjectId..."), "number" : 4 } { "_id" : ObjectId("600ee266b97bfefc365ec22e"), "number" : 5 } { "_id" : ObjectId(..."), "number" : 9 } { "_id" : ObjectId("600ee266b97bfefc365ec233"), "number" : 10 } { "_id" : ObjectId
() { "_id" : ObjectId("6170e7d1ced87b0c142a3b9f"), "name" : "菜鸟果果" } { "_id" : ObjectId("6170e840ced87b0c142a3ba0..."), "name" : "菜鸟果果2" } { "_id" : ObjectId("6170e8c8ced87b0c142a3ba1"), "name" : "菜鸟果果2" } { "_id" : ObjectId...("6170fcb3ced87b0c142a3ba2"), "name" : "菜鸟果果3" } { "_id" : ObjectId("6170fcd8ced87b0c142a3ba3"), "name...> db.gmtest.findOne({"name":"菜鸟果果"}) { "_id" : ObjectId("6170e7d1ced87b0c142a3b9f"), "name" : "菜鸟果果"..." : ObjectId("6170fcb3ced87b0c142a3ba2"), "name" : "菜鸟果果3" } { "_id" : ObjectId("6170fcd8ced87b0c142a3ba3
ObjectId("5baee3102785bf92e10d44cf"), "files_id" : ObjectId("5baee3102785bf92e10d44cb"), "n" : 3 } {..."_id" : ObjectId("5baee3102785bf92e10d44cd"), "files_id" : ObjectId("5baee3102785bf92e10d44cb"), "n"...: 1 } { "_id" : ObjectId("5baee3102785bf92e10d44ce"), "files_id" : ObjectId("5baee3102785bf92e10d44cb..."), "n" : 2 } { "_id" : ObjectId("5baee3102785bf92e10d44d0"), "files_id" : ObjectId("5baee3102785bf92e10d44cb..."), "n" : 4 } { "_id" : ObjectId("5baee3112785bf92e10d44d1"), "files_id" : ObjectId("5baee3102785bf92e10d44cb
"), "number" : 999 } { "_id" : ObjectId("5ffc051bd4c416daac62070b"), "number" : 998 } { "_id" : ObjectId..."), "number" : 996 } { "_id" : ObjectId("5ffc050fd4c416daac61ff39"), "number" : 996 } { "_id" : ObjectId..."), "number" : 1999 } { "_id" : ObjectId("5ffc0511d4c416daac620324"), "number" : 1999 } { "_id" : ObjectId..."), "number" : 1997 } { "_id" : ObjectId("5ffc051dd4c416daac620af1"), "number" : 1996 } { "_id" : ObjectId..."), "number" : 1994 } { "_id" : ObjectId("5ffc0511d4c416daac62031f"), "number" : 1994 } { "_id" : ObjectId
"), "name" : "phyger-2" } > db.test.insert({"_id":ObjectId("62bad0b8b63fec7fa1ee0c4a"),"name":"phyger...('62bad0b8b63fec7fa1ee0c4a') }" } }) > db.test.save({"_id":ObjectId("62bad0b8b63fec7fa1ee0c4a...> db.test.find({"age":19}).pretty() { "_id" : ObjectId("62bac83d6e89996fc64680e6"), "..."), "name" : "phyger-2", "age" : 20 } { "_id" : ObjectId("62bad0b8b63fec7fa1ee0c4a"),...2.4、逻辑语句 2.4.1、AND > db.test.find({"name":"phyger-2","age":18}).pretty() { "_id" : ObjectId("
4、字符串 最常用的数据类型 {"x":"string"} 5、对象id 对象id是12字节的唯一ID {"x":ObjectId()} 在MongoDB的数据记录里面,也就是文档里面,必须有一个_id...这12个字节的生成方式如下: 0、1、2、3位是时间戳,提供秒级别唯一性 4、5、6位是机器的唯一标识符,提供机器级别唯一性 7、8位是当前生成ObjectId的进程标识符,保证不同进程的唯一性 9、10...、11位是一个计数器,保证同一秒相同进程产生的ObjectId的唯一性。...("5f96b5e15e5c5ff982b9c6af"), "age" : 28 } { "_id" : ObjectId("5f9835d0f24f04e23fb63878"), "age" : 3...} { "_id" : ObjectId("5f983621f24f04e23fb63879"), "age" : 3 } { "_id" : ObjectId("5f9838d2f24f04e23fb6387a
("5f1f8aa8099483199e74737d"), ObjectId("5f1f8aa8099483199e74737e"), ObjectId...("5f1f96cf4326f1d6a51d3a7d"), ObjectId("5f1f96cf4326f1d6a51d3a7e"), ObjectId...("5f1f96cf4326f1d6a51d3a7f"), ObjectId("5f1f96cf4326f1d6a51d3a80"), ObjectId...("5f1f96cf4326f1d6a51d3a81"), ObjectId("5f1f96cf4326f1d6a51d3a82"), ObjectId...("5f1f96cf4326f1d6a51d3a83"), ObjectId("5f1f96cf4326f1d6a51d3a84"), ObjectId
领取专属 10元无门槛券
手把手带您无忧上云