目录
摘要
数值类型,访问数组
数据类型
分类
- null
- boolean
- 32bit int
- 64bit int
- 64bit float
- string
- ObjectId
- 等等
数值类型
MongoDB 支持 3 种类型:32 位整数,64 位整数和 64 位浮点数。
规律
- 默认有小数点的数字会被保存为 64 位 double。
- 在32位机器上
- 没有小数点的数字会被保存为 32 位 int,使用 bigint 会被保存为 64 位 int
- 超过 64 位 int 的数字会被自动解析为 double
- 在 64 位机器上
- 没有小数点的数字会被保存为 64 位 int,且无法保存 32 位 int
所以如果 32 位机器和 64 位机器共同使用的话,会发生各种奇怪的现象。
Shell 中的数值
Shell 只有一种数字类型 8-byte float
,这意味着它并不是总能显示正确的 8-byte integer。在 shell 显示 64 位 int 时,它可能会被显示为近似值。
例如:
{
"x":{
"floatApprox":xxx,
"top":yyy,
"bottom":zzz
}
}
这并不表示 x 是浮点型,而是表示 x 并不精确,top 是高 32 位,bottom 是低 32 位
但是 Javascript shell 只支持 64 位浮点数,这意味着即使从数据库原封不动取得一个 32 位整数的记录再重新更新,数据也会被转换为 64 位浮点数。
数组类型
访问数组中的元素
db.<dbName>.<collectionName>.<index>
例:
db.blog.find({ "comments.0.author" : "Jane" })
使用 “$”
很多时候必须先进行查询才能获得下标。此时可以使用 $
,其总会返回匹配条件的第一条。
<collectionName>.$
例:
db.blog.update({ "comments.author" : "John"}, {"$set" : {"comments.$.author" : "Jim"}})`