目录
进入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运算符一起使用,通过其BSON类型查询文档。type聚合操作符返回的是,使用列表中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
