定义Mongoose模式时,通常应谨慎指定应存在哪些索引.也就是说,在许多情况下,我们希望控制创建的索引的名称,尤其是当这些索引是复合的,这样它们是可以理解的.
实际上,在创建某些索引时,需要明确指定索引名称以避免超出index name length limit
.
由于ensureIndex
(在默认情况下)对模式中定义的索引进行调用,因此控制由ensureIndex创建的索引名称的适当语法是什么?我认为使用字段级索引语法是不可能的,但它肯定可用于模式级索引吗?
var ExampleSchema = new Schema({ a: String, b: String, c: Date, d: Number, e: { type: [String], index: true } // Field level index }); // We define compound indexes in the schema ExampleSchema.index({a: 1, b: 1, c: 1}); ExampleSchema.index({d:1, e:1}, {unique: true});
值得注意的是,db.collection.ensureIndex
已弃用(通过mongodb),现在是别名db.collection.createIndex
.
您可以使用调用name
的option参数的属性设置索引的名称index
:
ExampleSchema.index({a: 1, b: 1, c: 1}, {name: 'my_index'}); ExampleSchema.index({d:1, e:1}, {name: 'my_other_index', unique: true});
如文档中所述,第二个参数index
包含:
传递给MongoDB驱动程序
createIndex()
函数的选项
该createIndex
文档列出所有可能的选项设置,包括name
.