BSON类型

BSON类型目录 1ObjectId2 字符串 3 时间戳 4 日期 BSON 是一种二进制序列化格式 用于在 MongoDB 中存储文档和进行远程过程调用 BSON 规范位于 bsonspec org 每种 BSON 类型都有数字和字符串作为标识符 如下表所示 类型数字别名备注 Double1 double String2 string Object3 object

进入MongoDB中文手册(4.2版本)目录

BSON是一种二进制序列化格式,用于在MongoDB中存储文档和进行远程过程调用。BSON规范位于 bsonspec.org。
每种BSON类型都有数字和字符串作为标识符,如下表所示:

类型 数字 别名 备注
Double 1 “double”
String 2 “string”
Object 3 “object”
Array 4 “array”
Binary data 5 “binData”
Undefined 6 “undefined” Deprecated.
ObjectId 7 “objectId”
Boolean 8 “bool”
Date 9 “date”
Null 10 “null”
Regular Expression 11 “regex”
DBPointer 12 “dbPointer” Deprecated.
JavaScript 13 “javascript”
Symbol 14 “symbol” Deprecated.
JavaScript (with scope) 15 “javascriptWithScope”
32-bit integer 16 “int”
Timestamp 17 “timestamp”
64-bit integer 18 “long”
Decimal128 19 “decimal” New in version 3.4.
Min key -1 “minKey”
Max key 127 “maxKey”

您可以将这些值与 t y p e 运 算 符 一 起 使 用 , 通 过 其 B S O N 类 型 查 询 文 档 。 type运算符一起使用,通过其BSON类型查询文档。 type使BSONtype聚合操作符返回的是,使用列表中BSON类型字符串的操作符表达式(operator expression)的类型。
要确定字段的类型,请参阅mongo Shell中的检测的类型(Check Types in the mongo Shell)。
如果将BSON转换为JSON,请参阅扩展JSON的内容。
以下各节描述了特定BSON类型的特殊注意事项。






1 ObjectId

ObjectId很小,可能是唯一的,可以快速生成并排序。ObjectId值的长度为12个字节,包括:

  • 一个4字节的时间戳的值,表示从UNIX新纪元以来的秒数,是ObjectId的创建时间;
  • 5字节随机数的值;
  • 3字节递增计数器的值,初始化为随机值。
  • 在mongo shell中,您可以使用ObjectId.getTimestamp()方法获取ObjectId的创建时间;
  • 在存储ObjectId值的_id字段上进行排序大致相当于按创建时间进行排序。

2 字符串

3 时间戳

BSON有一个特殊的时间戳类型 在MongoDB的内部使用, 与常规日期类型无关。此内部时间戳记类型是64位值,其中:

  • 最高有效32位是一个time_t值(自Unix时代以来的秒数);
  • 最低有效32位是ordinal给定秒内的操作增量。

当插入顶层字段包含空的时间戳值的文档时,MongoDB会将空时间戳值替换为当前时间戳值,但以下情况除外。如果_id 字段本身包含空的时间戳记值,则将始终按原样插入而不替换它。

db.test.insertOne( { 
        ts: new Timestamp() } ); 

运行db.test.find() 将返回类似于以下内容的文档:

{ 
        "_id" : ObjectId("542c2b97bac0b48"), "ts" : Timestamp(, 1) } 

服务器已将空时间戳记值替换为ts插入时的时间戳值。

4 日期

var mydate1 = new Date() 
var mydate2 = ISODate() 
mydate1.toString() 
mydate1.getMonth() 

在2.0版之前,Date值被错误地解释为无符号整数,这会影响排序,范围查询和Date字段索引。由于升级时不会重新创建索引,因此,如果您Date使用较早版本的值创建了索引,则请重新索引,并且1970年之前的日期与您的应用程序相关。








版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176827.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午8:57
下一篇 2026年3月26日 下午8:57


相关推荐

  • 微信小程序支付 php后台对接完整代码

    微信小程序支付 php后台对接完整代码这个代码全是干货呀 拿过来可以直接使用 小程序在调起微信支付之前需要 5 个参数 这时候就需要携带 code 向后台请求 然后后台根据 code 获取 openid 再进行服务器之间的 nbsp 一 准备工作 1 小程序注册 要以公司的以身份去注册一个小程序 才有微信支付权限 2 绑定商户号 3 在小程序填写合法域二 完成以上条件 你可以得到 nbsp nbsp nbsp 小程序 appid 小程序秘钥 nbsp nbsp

    2026年3月19日
    3
  • jsonobject转换成对象_jsonobject转jsonarray

    jsonobject转换成对象_jsonobject转jsonarrayJSONObjectobj=newJSONObject();{obj.put("key1","value1");obj.put("key2","value2");obj.put("key3","value3");}Map<String,String>params=JSONObject.parseObject(obj.toJSON

    2022年8月23日
    10
  • SPPNet网络模型[通俗易懂]

    SPPNet网络模型[通俗易懂]上篇文章详细阐述了R-CNN网络模型,本篇本章本来准备阐述Fast-RCNN模型的,介于SPP-Net模型有许多技巧性的技术可以在不同模型上使用,所以本篇详细分析下SPP-NetSPPNet论文:https://arxiv.org/abs/1406.4729SPPNet论文翻译:https://blog.csdn.net/mengduan…

    2022年6月9日
    29
  • Django(15)外键和表关系[通俗易懂]

    Django(15)外键和表关系[通俗易懂]外键删除操作如果一个模型使用了外键。那么在对方那个模型被删掉后,该进行什么样的操作。可以通过on_delete来指定。可以指定的类型如下:CASCADE:级联操作。如果外键对应的那条数据被删除了,

    2022年7月28日
    6
  • mysql聚集索引和非聚集索引的区别_聚集索引与非聚集索引的总结

    mysql聚集索引和非聚集索引的区别_聚集索引与非聚集索引的总结一 索引简介众所周知 索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构 SQL 的主流索引结构有 B 树以及 Hash 结构 聚集索引以及非聚集索引用的是 B 树索引 这篇文章会总结 SQLServer 以及 MySQL 的 InnoDB 和 MyISAM 两种 SQL 的索引 SQLSever 索引类型有 唯一索引 主键索引 聚集索引 非聚集索引 MySQL 索引类型有 唯一索引 主键 聚集 索引 非聚集索引

    2026年3月18日
    2
  • SSM框架下,访问不到静态资源

    SSM框架下,访问不到静态资源记一次小问题。 做项目时,启动Tomcat,发现.jsp文件都能访问,但是同路径下的Html不能访问。服务器什么一切正常,没有任何错误信息。但就是最后返回视图的时候总是找不到资源。 经过仔细查找,发现原来在springmvc中,如果配置/拦截所有的请求,,那么在返回视图的.html url中一样会被拦截。但此时dispatcheservlet 拦截…

    2022年6月13日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号