Comment on page
BSON类型
在本页面
每种BSON类型都具有整数和字符串标识符,如下表所示:
类型 Type | 对应数字 Number | 别名 Alias | 备注 Notes |
---|---|---|---|
双精度浮点型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 还可以带来以下好处:也可以看看
- 最重要的32位是一个
time_t
值(自Unix时代以来的秒数) - 最低有效32位是
ordinal
给定秒内的操作增量。
注意
当插入包含带有空时间戳值的顶级字段的文档时,MongoDB会将空时间戳值替换为当前时间戳值,但以下情况除外。如果
_id
字段本身包含空的时间戳记值,则将始终按原样插入而不替换它。示例
插入带有空时间戳值的文档:
复制
db.test.insertOne( { ts: new Timestamp() } );
{ "_id" : ObjectId("542c2b97bac0595474108b48"), "ts" : Timestamp(1412180887, 1) }
服务器已使用插入时的时间戳值替换了
ts
的空时间戳值。BSON Date是一个64位整数,代表自Unix纪元(1970年1月1日)以来的毫秒数。这导致可以追溯到过去和未来约2.9亿年的日期范围。
示例
复制
var mydate1 = new Date()
示例
复制
var mydate2 = ISODate()
示例
以字符串形式返回
Date
值:复制
mydate1.toString()
示例
返回日期值的月份部分;月是零索引,因此一月是
0
月:复制
mydate1.getMonth()
在2.0版之前, Date 值被错误地解释为_无符号_整数,这会影响排序,范围查询和Date 字段索引。由于升级时不会重新创建索引,因此,如果您早期版本使用Date 值创建了索引,请对与应用相关的、1970年前的日期进行重新索引。 | |
| |
译者:小芒果
最近更新 2yr ago