我看到在mongodb中存储布尔信息的三种主要可能性:
每种方法在使用的存储空间和查询速度方面有哪些优点/缺点?
答案 0 :(得分:30)
Boolean
是BSON中的本机字段类型(MongoDB的服务器端存储格式,又名“Binary JSON”)。布尔值比整数或字符串使用更少的存储空间,并避免任何意外的比较副作用。
例如,在MongoDB find()
查询中,"1"
的字符串与1
的数值或布尔值true
不匹配。如果要存储布尔值,请务必使用布尔类型。
比较mongo
shell中的BSON大小(以字节为单位)是否完整:
// Number (JavaScript double) - 8 bytes
> var foo = { a: 1 }
> Object.bsonsize(foo)
16
// UTF-8 String - 6 bytes
> var foo = { a: '1'}
> Object.bsonsize(foo)
14
// 32-bit int - 4 bytes
> var foo = { a: NumberInt(1)}
> Object.bsonsize(foo)
12
// Boolean - 1 byte
> var foo = { a: true}
> Object.bsonsize(foo)
9
注意:上面示例中的JSON对象的基本大小(不计算字段值)是8个字节,因此报告的Object.bsonsize()
之间的差异是字段值的表示。
答案 1 :(得分:0)
如果你有几个布尔值,那么使用BSON内置的布尔值可能没问题。但如下所示,每个布尔值的大小为4个字节。因此,如果您的数据非常小(与额外的4个字节相比),并且/或者您有许多布尔值,那么最好使用带有bitwise操作的整数位图。
> var foo = {}
> Object.bsonsize(foo)
5
> foo.a = true
true
> Object.bsonsize(foo)
9
> foo.b = true
true
> Object.bsonsize(foo)
13