Don*_*ott 5 mongoose mongodb mongoose-schema
定义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});
Run Code Online (Sandbox Code Playgroud)
值得注意的是,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});
Run Code Online (Sandbox Code Playgroud)
如文档中所述,第二个参数index包含:
传递给MongoDB驱动程序
createIndex()函数的选项
该createIndex文档列出所有可能的选项设置,包括name.
事实证明,Mongoose 相当透明地包装了 Mongo 驱动程序。
因此,对 的调用可以粗略地解释为对 Mongo 3.0+或 的<Mongoose.Schema>.index(<keys>, <options>)调用 。db.collection.ensureIndex(keys, options)db.collection.createIndex(keys, options)
因此,所需的语法(虽然没有详细记录)与模式索引声明的 MongoDB 语法相同。
也就是说,我们声明名称如下:
ExampleSchema.index({a: 1, b: 1, c: 1}, {name: "ExampleIndexName_ABC"});
ExampleSchema.index({d:1, e:1}, {unique: true, name: "ExampleCompoundIndexName"});
Run Code Online (Sandbox Code Playgroud)
选项还包括:
backgrounduniquenamepartialFilterExpressionsparseexpireAfterSeconds storageEngine详情请参阅MongoDB 官方文档。
| 归档时间: |
|
| 查看次数: |
5139 次 |
| 最近记录: |