我在架构中设置了两个复合索引
(...)
ModelSchema.index({"field1":1, "field2":1, "field3": 1, "field4": 1})
ModelSchema.index({"field1":1, "field2":1, "field3": -1, "field4": -1})
module.exports = mongoose.model('Model', ModelSchema)
然后我打电话
Model.insertMany(itemsArray)
在mongo shell中,我可以看到两个索引都已创建。但是,当我尝试查询带有第二个索引提示的集合时,出现了错误。
所以我要做的是打开猫鼬调试
mongoose.set('debug', true)
在日志中,我可以看到操作的顺序是这样的:
Mongoose: models.ensureIndex({"field1":1, "field2":1, "field3": 1, "field4": 1})
Mongoose: models.insertMany([....])
(...other operations of my code happening here)
Mongoose: models.ensureIndex({"field1":1, "field2":1, "field3": -1, "field4": -1})
Mongoose: models.indexInformation({ full: true })
所以,在我看来,两件事正在发生:
在将项目插入集合中之前,如何保证两个索引都得到保证?