在mongoose中使用数字而不是字符串作为枚举模式更好吗?

时间:2016-06-16 07:24:26

标签: mongodb mongoose

在搜索性能方面,在mongoose中使用数字而不是字符串作为枚举模式会更好吗?

例如,我有这个:

 status: {
     type: String, 
     enum: ['active', 'inactive', 'disabled', 'deleted'], 
     default: 'inactive'
 },

 //status: {
 //    type: Number, 
 //    enum: [0, 1, 2, 3], 
 //    default: '1'
 //},   

db.col.find({status: 'active'})会慢于db.col.find({status: 1})吗?

2 个答案:

答案 0 :(得分:2)

Mongodb使用BSON(二进制JSON)来存储文档。 阅读本文以了解json和bson Mongodb - https://www.mongodb.com/json-and-bson

数字(整数和双数)是“基本类型” 在BSON(数据存储在Mongo中的二进制格式),并做 不带额外的开销。

字符串带来一些额外的开销 他们;比特告诉Mongo他们是字符串,并告诉Mongo 他们有多久。

所以数字会比字符串快。

<强>参考

http://bsonspec.org/spec.html

答案 1 :(得分:2)

thisthis相似的问题一样,在使用索引时,从性能的角度来看大部分都是微不足道的 - 但数字会快一些。
如果您仍想使用数字,可以在模式中添加一个虚拟属性,从您的数字枚举转换为描述性字符串,这样您就可以在某种意义上充分利用这两个世界。