BSON类型
最后更新于
最后更新于
在本页面
是一种二进制序列化格式,用于在MongoDB中存储文档和进行远程过程调用。BSON规范位于。
每种BSON类型都具有整数和字符串标识符,如下表所示:
双精度浮点型Double
1
“double”
字符串String
2
“string”
对象Object
3
“object”
数组Array
4
“array”
二进制数据Binary data
5
“binData”
未定义Undefined
6
“undefined”
不推荐使用。
对象编号ObjectId
7
“objectId”
布尔型Boolean
8
“bool”
日期Date
9
“date”
空值Null
10
“null”
正则表达式Regular Expression
11
“regex”
DBPointer
12
“dbPointer”
不推荐使用。
JavaScript
13
“javascript”
Symbol
14
“symbol”
不推荐使用。
JavaScript (带范围)
15
“javascriptWithScope”
32位整数 32-bit integer
16
“int”
时间戳 Timestamp
17
“timestamp”
64位整数 64-bit integer
18
“long”
小数128 Decimal128
19
“decimal”
3.4版的新功能。
最小键 Min key
-1
“minKey”
最大键 Max key
127
“maxKey”
以下各节描述了特定BSON类型的特殊注意事项。
ObjectId很小,可能唯一,可以快速生成并排序。ObjectId值的长度为12个字节,包括:
一个4字节的_时间戳记值_,代表自Unix时代以来以秒为单位的ObjectId的创建
5字节_随机值_
3字节_递增计数器_,初始化为随机值
虽然BSON格式本身是低位优先的,但_时间戳_和 _计数器_值却是高位优先的,最高有效字节在字节序列中排在最前面。
MongoDB客户端应添加一个_id
具有唯一ObjectId 的字段。在该_id
字段中使用ObjectIds 还可以带来以下好处:
在存储ObjectId
值的_id
字段上按大致相当于创建时间进行排序。
重要
由客户端生成,客户端可能具有不同的系统时钟。
也可以看看
最重要的32位是一个time_t
值(自Unix时代以来的秒数)
最低有效32位是ordinal
给定秒内的操作增量。
注意
当插入包含带有空时间戳值的顶级字段的文档时,MongoDB会将空时间戳值替换为当前时间戳值,但以下情况除外。如果_id
字段本身包含空的时间戳记值,则将始终按原样插入而不替换它。
示例
插入带有空时间戳值的文档:
复制
服务器已使用插入时的时间戳值替换了ts
的空时间戳值。
BSON Date是一个64位整数,代表自Unix纪元(1970年1月1日)以来的毫秒数。这导致可以追溯到过去和未来约2.9亿年的日期范围。
示例
复制
示例
复制
示例
以字符串形式返回Date
值:
复制
示例
返回日期值的月份部分;月是零索引,因此一月是0
月:
复制
在2.0版之前,Date
值被错误地解释为_无符号_整数,这会影响排序,范围查询和Date
字段索引。由于升级时不会重新创建索引,因此,如果您早期版本使用Date
值创建了索引,请对与应用相关的、1970年前的日期进行重新索引。
译者:小芒果
您可以将这些值与运算符一起使用,以按其BSON类型查询文档。所述聚合操作者返回的类型使用列出的BSON类型字符串之一。
要确定字段的类型,请参阅。
如果将BSON转换为JSON,请参阅参考。
在MongoDB中,存储在集合中的每个文档都需要一个唯一的 字段作为。如果插入的文档省略了该_id
字段,则MongoDB驱动程序会自动为该字段生成一个_id
。
这也适用于通过通过更新操作插入的文档。
在shell中,您可以使用方法访问ObjectId
的创建时间。
尽管值应随时间增加,但不一定是单调的。这是因为他们:
仅包含一秒的时间分辨率,因此 在同一秒内创建的值没有保证的顺序,并且
BSON字符串为UTF-8。通常,在对BSON进行序列化和反序列化时,每种编程语言的驱动程序都会从该语言的字符串格式转换为UTF-8。这样就可以轻松地将大多数国际字符存储在BSON字符串中。 此外,MongoDB 查询在正则表达式字符串中支持UTF-8。
给定使用UTF-8字符集的字符串,在字符串上使用将是合理正确的。但是,由于内部 使用C ++ strcmp
API,因此排序顺序可能会错误地处理某些字符。
BSON有一个特殊的时间戳类型给MongoDB_内部_ 使用,而非常规相关的 类型。此内部时间戳记类型是64位值,其中:
虽然BSON格式是低位优先的,因此首先存储了最低有效位,但是无论字节序如何,在所有平台上实例始终将time_t
值与ordinal
值比较。
在单个实例中,时间戳记值始终是唯一的。
在复制中,操作具有一个ts
字段。该字段中的值反映了使用BSON时间戳值的操作时间。
BSON时间戳类型供MongoDB_内部_ 使用。在大多数情况下,在应用程序开发中,您将需要使用BSON日期类型。有关更多信息,请参见。
运行 然后将返回类似于以下内容的文档:
该 指的是BSON Date类型为_UTC日期时间_。
BSON日期类型是有符号整数。负值表示1970年之前的日期。
在 shell中使用构造函数 new Date()
构造一个Date :
在 shell中使用构造函数ISODate()
构造一个Date :
原文链接: