我应该如何在mongodb中存储布尔值?

Chr*_*son 20 mongoose mongodb

我看到在mongodb中存储布尔信息的三种主要可能性:

  1. 0或1作为字符串
  2. 0或1作为数字
  3. 作为布尔值的真或假

在使用的存储空间和查询速度方面,每种方法的优点/缺点是什么?

Ste*_*nie 31

BooleanBSON中的本机字段类型(MongoDB的服务器端存储格式,又名"二进制JSON").布尔值比整数或字符串使用更少的存储空间,并避免任何意外的比较副作用.

例如,在MongoDB find()查询中,字符串"1"与数值1或布尔值不匹配true.如果要存储布尔值,请务必使用布尔类型.

比较mongoshell中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
Run Code Online (Sandbox Code Playgroud)

注意:上面示例中的JSON对象的基本大小(不计算字段值)是8个字节,因此报告的差异Object.bsonsize()是字段值的表示.