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群,请同学们自己下载查看。
"), "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
"_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
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
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
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')
ObjectId ObjectId 是”_id” 的默认类型。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。...但关键是要知道这个长长的ObjectId 是实际存储数据的两倍长。 如果快速连续创建多个ObjectId,会发现每次只有最后几位数字有变化。...为了确保在同一台机器上并发的多个进程产生的ObjectId 是唯一的,接下来的两字节来自产生ObjectId 的进程标识符(PID)。...前9 字节保证了同一秒钟不同机器不同进程产生的ObjectId 是唯一的。后3 字节就是一个自动增加的计数器,确保相同进程同一秒产生的ObjectId 也是不一样的。...在客户端生成ObjectId,驱动程序能够提供更加丰富的API。例如,驱动程序可以有自己的insert 方法,可以返回生成的ObjectId,也可以直接将其插入文档。
{ "_id" : ObjectId("5594f048a9a970e631c4c20e"), "d" : 2 } { "_id" : ObjectId("5594f048a9a970e631c4c20f..."), "d" : 3 } { "_id" : ObjectId("5594f048a9a970e631c4c210"), "d" : 4 } { "_id" : ObjectId("5594f048a9a970e631c4c212..."), "d" : 6 } { "_id" : ObjectId("5594f048a9a970e631c4c213"), "d" : 7 } { "_id" : ObjectId("5594f048a9a970e631c4c214...{ "_id" : ObjectId("5594f048a9a970e631c4c20e"), "d" : 2 } { "_id" : ObjectId("5594f048a9a970e631c4c20f..."), "d" : 99 } { "_id" : ObjectId("5594f119a9a970e631c4c217"), "d" : 199 } { "_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("
" : "2" } { "_id" : ObjectId("4e3f33e06266b5845052c02d"), "value" : "9" } { "_id" : ObjectId(...("4e3f3dd96266b5845052c035"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c")... } ], "value" : 3 } { "_id" : ObjectId("4e3f3de16266b5845052c036"), "Apid" : [ { "$ref" : "A", "$...id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 4 } { "_id" : ObjectId("4e3f3dec6266b5845052c037..."_id" : ObjectId("4e3f3df06266b5845052c038"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c
() { "_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
领取专属 10元无门槛券
手把手带您无忧上云