Mongo 复合索引排序

Mongo compound index ordering

定义复合索引:

db.collection.ensureIndex( { orderDate: 1, zipcode: -1 } )

恍然大悟:JS对象的字段是有序的吗? 是否存在 orderDate 排在第一位的隐含假设?我很惊讶它没有使用数组。

对于mongoose,我们使用:

schema.index({a:1, b:1})

我们如何确保此对象传输到 mongo 服务器,其中的字段按照代码中指定的顺序排列?

这 post 表示字段未排序。 Does JavaScript Guarantee Object Property Order?

Is it acceptable style for Node.js libraries to rely on object key order?

来自documentation

Indexes store references to fields in either ascending (1) or descending (-1) sort order. For single-field indexes, the sort order of keys doesn’t matter because MongoDB can traverse the index in either direction. However, for compound indexes, sort order can matter in determining whether the index can support a sort operation.

因此,如果您使用

创建索引
db.collection.ensureIndex( { orderDate: 1, zipcode: -1 } ) 

对象将被传输到 mongo 服务器,其中包含订购的字段还请注意使用

db.collection.ensureIndex( { orderDate: 1, zipcode: -1 } ) 

db.collection.ensureIndex( {  zipcode: -1 , orderDate: 1} ) 

将创建两个不同的复合索引