_id存储的ObjectId值的排序大致是按创建时间排序的。...如果使用错误,就会导致日期和字符串混淆,字符串和日期不能互相匹配,最终会给删除、更新、查询等很多操作带来问题。 shell中的日期显示时使用本地时区设置。...shell将数据库里的符号类型转换成字符串。现在已经过时。 13、Timestamp(时间戳) BSON有一个MongoDB内部使用的特殊的时间戳类型,和常的日期类型没有关系。...该字段中的值反映了使用BSON时间戳值的操作时间。 注意时间戳类型只是在MongoDB内部使用。开发过程中使用的是日期类型。...7、BinData MongoDB按BinData以下顺序排序: 首先,比较数据的长度或大小。 然后,按BSON的一字节子类型进行比较。 最后,根据数据执行逐字节比较。
,不可变 d={'x':ObjectId()} 5、_id和ObjectId MongoDB中存储的文档必须有一个"_id"键。...这个键的值可以是任意类型,默认是个ObjectId对象。 在一个集合里,每个文档都有唯一的“_id”,确保集合里每个文档都能被唯一标识。...不同集合"_id"的值可以重复,但同一集合内"_id"的值必须唯一 #1、ObjectId ObjectId是"_id"的默认类型。...因为设计MongoDb的初衷就是用作分布式数据库,所以能够在分片环境中生成 唯一的标识符非常重要,而常规的做法:在多个服务器上同步自动增加主键既费时又费力,这就是MongoDB采用 ObjectId的原因...这样就可以保证不同主机生成不同的ObjectId,不产生冲突 接下来连个字节确保了在同一台机器上并发的多个进程产生的ObjectId是唯一的 前9个字节确保了同一秒钟不同机器不同进程产生的ObjectId
---- 分布式ID的特性 唯一性:确保生成的ID是全网唯一的。 有序递增性:确保生成的ID是对于某个用户或者业务是按一定的数字有序递增的。 高可用性:确保任何时候都能正确的生成ID。...但是3-5台服务器基本能够满足器上,都可以获得不同的ID。但是步长和初始值一定需要事先需要了。使用Redis集群也可以方式单点故障的问题。 另外,比较适合使用Redis来生成每天从0开始的流水号。...比如订单号=日期+当日自增长号。可以每天在Redis中生成一个Key,使用INCR进行累加。 优点: 1)不依赖于数据库,灵活方便,且性能优于数据库。...---- 7、 MongoDB的ObjectId MongoDB的ObjectId和snowflake算法类似。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。...MongoDB 中我们经常会接触到一个自动生成的字段:"_id",类型为ObjectId。 之前我们使用MySQL等关系型数据库时,主键都是设置成自增的。
下面我们慢慢说 MongoDB的常用数据类型和MySQL比较像,你可以对比着看。...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...6、日期类型 日期类型存储的是从标准纪元开始的毫秒数,不存储时区。...每天的内容不多,慢慢来,一点一点搞懂它。。。晚安喽。
BSON BSON是一种二进制序列化格式,用于在 MongoDB 中存储文档和进行远程过程调用 跟 JSON 的数据结构很像,但是支持更丰富的数据类型 数据类型 数据类型 序号 别名 备注 Double...可以看到,通过 $type 来指定数据类型的时候,可以用别名,也可以用序号 ObjectId ObjectId 很小,可能是唯一的,生成速度快,并且有序,ObjectId 值的长度为 12 个字节,包括...的好处 对存储 ObjectId 值的 _id 字段进行排序大致相当于按创建时间排序 在 mongo shell 中,可以使用 ObjectId.getTimestamp() 方法访问 ObjectId...字符串是UTF-8 在序列化和反序列化 BSON 时,每种编程语言的驱动程序都会从该语言的字符串格式转换为 UTF-8 这使得在 BSON 字符串可以轻松存储大多数国际字 此外,MongoDB $regex...查询在 regex 字符串中支持 UTF-8 Timestamps BSON 有一个特殊的时间戳类型供内部 MongoDB 使用,并且与常规 Date 类型无关 此内部时间戳类型是一个 64 位值 前
MongoDB 查询文档 MongoDB AND 条件 MongoDB OR 条件 MongoDB AND 和 OR 联合使用 MongoDB 条件操作符 MongoDB (>) 大于操作符 - $gt...MongoDB(>=)大于等于操作符 - $gte MongoDB (<) 小于操作符 - $lt MongoDB (<=) 小于操作符 - $lte MongoDB 使用 () 查询...- $lt 和 $gt 手把手教你 MongoDB 的安装与详细使用(一) http://www.ymq.io/2018/01/29/MongoDB-2/ 接下来继续 MongoDB Limit与Skip...MongoDB 排序 MongoDB sort()方法 在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段 使用 1 和 -1 来指定排序的方式,其中...$minute: 返回该日期的分钟部分。 $second: 返回该日期的秒部分(以0到59之间的数字形式返回日期的第二部分,但可以是60来计算闰秒)。
注意点: 创建日期语句如下 :参数的格式为YYYY-MM-DD new Date('2017-12-20') 每个文档都有一个属性,为_id,保证每个文档的唯一性 可以自己去设置..._id插入文档,如果没有提供,那么MongoDB为每个⽂档提供了一个独特的_id,类型为objectID objectID是一个12字节的十六进制数: 前4个字节为当前时间戳 接下来3个字节的机器ID...(字段_id存在就更新):db.集合名称.save(document) 举个栗子: #插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId db.xianyu.insert...$group对应的字典中有几个键,结果中就有几个键 分组依据需要放到_id后面 取不同的字段的值需要使用$,$gender,$age 取字典嵌套的字典中的值的时候$_id.country 能够同时按照多个键进行分组...[]括号的形式选择数据库和集合 self.cliention = client["xianyu"]["xianyuplus"] 插入数据 插入单条数据:返回ObjectId def item_inser_one
示例如下: {"x" : "123@qq.com"} 3.5 日期类型 MongoDB 中日期使用时间戳表示,单位为毫秒,不存储时区。...示例如下: 创建日期对象时应该使用 new Date() ,而非构造函数 Date() 。...{"x" : {"kaikeba" : "kaikeba.com"}} 3.9 _id 和 ObjectId MongoDB 中每个文档都有一个 " id" 键, " id" 可以是任何类型...multi : 可选, mongodb 默认是 false, 只更新找到的第一条记录,如果这个 参数为true,就把按条件查出 来多条记录全部更新。..._id 是服务器唯一的 id,host 服务器主 机 ip # 复制集名称 rs.initiate({_id:'rep1',members:[{_id:1,host:'
: 这种类型被用来对BSON元素的最低和最高值比较 • Arrays : 使用此类型的数组或列表或多个值存储到一个键 • Timestamp : 时间戳。...可以指定自己的日期和时间,日期和年,月,日到创建对象 • Object ID : 此数据类型用于存储文档的ID • Binary data : 此数据类型用于存储二进制数据 • Code : 此数据类型用于存储到文档中的..."by" : "lt50" } Limit和Skip 如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB...排序/distinct 在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列...使用 update() 和 save() 方法来更新集合中的文档。
4.2 圆点记法 MongoDB使用圆点符号来访问数组中的元素和嵌入式文档字段。 数组 MongoDB中数组是基于0索引的。使用圆点连接集合名称和索引位置: "....下面是关于_id字段值的常见选项: 使用ObjectIds 类型。 尽可能使用自然唯一字符,这样可以节省存储空间和避免额外的索引。 生成自增长数值 在你的应用程序中使用UUID。...下面的章节针对特定的BSON类型描述了特别的注意事项: 5.2 ObjectId ObjectId占据存储空间小、唯一、可被快速生成和索引。...最后三个字节表示以随机数开始的计数。 在MongoDB中,集合中的文档需要一个作为主键的唯一_id字段,如果没有指定_id字段,MongoDB默认将ObjectId类型值作为_id字段值。...MongoDB 客户端应该添加一个值为ObjectId的_id字段,使用值为ObjectId的_id字段有如下好处: 在mongo shell中,你可以使用ObjectId.getTimestamp()
"), "x" : 3 } 我们想按每行中唯一的字段进行分组,该x字段和聚合每个特定值x出现的次数。...每个子管道在输出文档中都有自己的字段,其结果存储为文档数组。 子管道可以在分组之前投影和过滤输入文档。常见用例包括在分类之前提取日期部分或计算。以下清单显示了构面操作示例: 示例 103....按计数排序操作需要分组字段或分组表达式。以下清单显示了按计数排序的示例: 示例 104....在这里,我们希望使用聚合框架返回每个州按人口划分的最小和最大城市。此示例演示了分组、排序和投影(选择)。...我们添加了额外的排序,以使用不同的 MongoDB 版本产生稳定的结果。在这里,我们要使用聚合框架返回人口超过 1000 万的所有州。此示例演示了分组、排序和匹配(过滤)。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。 “show dbs” 命令可以显示所有数据的列表。...2.linux 平台mongodb后台守护进程启动 Mongodb可以通过命令行方式和配置文件的方式来启动,具体命令如下: 命令行: [root@localhost mongodb]# ....use newdbname ; 切换或者创建新的集合(创建时,只有插入数据后,新集合才有效) 使用命令“use 数据库名称”,只是标记你要创建新的数据库,但是实际没有任何数据写入,所以mongodb是不会真的创建数据库的...db.表名.find({列名:数据1}) 按条件查询 db.表名.find({列名:数据1}).pretty() pretty() 将查带的结果格式话,更容易看清结构和内容 db.表名.findOne...分组统计 _id: 作为id的字段,无法改动 num_count: 统计这个分组的数目,自定义的,可以改动 通过字段 title字段对数据进行分组,并计算 title字段相同值的总和。
MongoDB 聚合 将记录按条件分组以后,然后再进行一系列操作,例如,求最大值、最小值、平均值,求和等操作。聚合操作还能够对记录进行复杂的操作,主要用于数理统计和数据挖掘。...$group:将集合中的文档分组,可用于统计结果。 范例 从 article 中得到每个 author 的文章数,并输入 author 和对应的文章数。...$year 以数字形式返回日期的年份(例如2014年)。 $month 将日期的月份返回为介于1(一月)和12(十二月)之间的数字。...$week 将日期的周数作为介于0(一年中第一个星期日之前的部分周)和53(闰年)之间的数字返回。 $hour 以0到23之间的数字返回日期的小时数。...,为了提高处理数据的效率,可以使用一下策略: 将 match 和 sort 放到管道的前面,可以给集合建立索引,来提高处理数据的效率。
,即一个值为一个文档 Null 存储Null值 Timestamp 时间戳 Date 存储当前日期或时间的UNIX时间格式 object id 每个文档都有一个属性,为_id,保证每个文档的唯一性,...objectID是一个12字节的十六进制数 前4个字节为当前时间戳 接下来3个字节的机器ID 接下来的2个字节中MongoDB的服务进程id 最后3个字节是简单的增量值 查询进阶 数据初始化...虽然在这种查询条件下,两者的顺序不会影响结果。但推荐使用skip().limit()的顺序。因为在聚合查询时两者的顺序不同会导致结果不同。...// 按gender字段进行分组 db.person.aggregate([ {$group:{_id:'$gender'}} ]); { "_id" : false } { "_id" : true...limit // skip 和 limit 在聚合时有顺序区分的。
,不可变 d={'x':ObjectId()} _id和Objectid MongoDB中存储的文档必须有一个"_id"键。...这个键的值可以是任意类型,默认是个ObjectId对象。 在一个集合里,每个文档都有唯一的“_id”,确保集合里每个文档都能被唯一标识。...不同集合"_id"的值可以重复,但同一集合内"_id"的值必须唯一 #1、ObjectId ObjectId是"_id"的默认类型。...因为设计MongoDb的初衷就是用作分布式数据库,所以能够在分片环境中生成 唯一的标识符非常重要,而常规的做法:在多个服务器上同步自动增加主键既费时又费力,这就是MongoDB采用 ObjectId的原因...这样就可以保证不同主机生成不同的ObjectId,不产生冲突 接下来连个字节确保了在同一台机器上并发的多个进程产生的ObjectId是唯一的 前9个字节确保了同一秒钟不同机器不同进程产生的ObjectId
它们使用了系统的命名空间: dbname.system.* 在MongoDB数据库中名字空间 .system.* 是包含多种系统信息的特殊集合(Collection),如下: 对于修改系统集合中的对象有如下限制...ObjectId ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是: 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时...时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。...1 日期 表示当前距离 Unix新纪元(1970年1月1日)的毫秒数。日期类型是有符号的, 负数表示 1970 年之前的日期。
16进制转10进制 通过时间戳的转换,我们就能看清它的真面目了。最终是一个完整的日期时间格式,如下图所示。...时间戳转日期 Machine ObjectId 规范中,还描述了,有一个占 3 个字节的 Machine(机器)。...也就是说每秒钟可以产生 16777216 个 ID,足够我们使用了,如果还不够,我们可以分机器,分集群。或者让客户端产生 ObjectId(客户端生成 ObjectId 我们后面再单独来讨论)。...id,决定了在同一台机器下,不同 mongodb 进程产生不同的 ObjectId;最后通过 3 个字节的自增计数器,确保同一秒内产生 ObjectId 的唯一性。...ObjectId 的这个主键生成策略,很好地解决了在分布式环境下高并发情况主键唯一性问题,非常值得我们学习和借鉴。 现在文章开头 3 个问题的答案,你已经知道了吧。欢迎留言评论说说你的想法!
出于相同的原因,MongoDB要求每个文档必须有唯一标识符:在MongoDB中,该标识符被称为_id。除非该字段指定某个值,否则MongoDB将自动创建该唯一值。...现在人们更愿意使用MongoDB创建的默认ID值,如果不确定键的唯一性或者不希望担心这件事情,那么最好还是使用MongoDB提供的默认键。...64位版本的MongoDB不含任何限制,所以在生产环境中应该优先使用64位版本。 另外需要关注MongoDB软件自己的版本:正式版、旧版和开发板。正式版表示它是最近可用的稳定版本。...MongoDB的查询优化器使用该数据结构对集合中的文档进行快速排序。这和关系数据库的索引作用是一致的。 索引保证了在文档中查询数据的速度。...使用其中一个操作符将告诉MongoDB只返回在从指定点开始的最大或最小距离(按米计算)之内的结果: > db.restaurants.find( { loc : { $near : { $geometry
MongoDB使用.来访问数组中的元素或者Document中的field。..._id Field MongoDB中,每一个Document必须要存储一个唯一的_id作为主键,如果代码中没有写入这个值,MongoDB会自动生成一个ObjectId进行写入。...MongoDB会在创建集合时对_id字段创建唯一索引。...对于_id字段通常会有以下建议: 使用ObjectId 如果可以,可以使用数据中唯一的字段来充当_id,这样可以节省存储空间和避免额外的索引 使用自增长的数字 如果使用UUID,可以将UUID转换为BinData...Binary Data binData类型的数据都有一个subtype用来表示如何解释此二进制数据,如下图: ObjectId ObjectId具有小,尽可能的唯一,快速生成且有序的特点,长度为12
领取专属 10元无门槛券
手把手带您无忧上云