Al definir un esquema Mongoose, a menudo es prudente especificar qué índices deben existir. Dicho esto, en muchos casos nos gustaría controlar el nombre del índice creado, especialmente cuando esos índices son compuestos para que sean comprensibles.
De hecho, al crear ciertos índices, se requiere especificar explícitamente un nombre de índice para evitar exceder el index name length limit .
Dado que se llama a ensureIndex (de forma predeterminada) en los índices definidos en el esquema, ¿cuál es la sintaxis adecuada para controlar el nombre de un índice creado por sureIndex? Supongo que esto es imposible con la sintaxis de índice de nivel de campo, pero seguramente está disponible para índices de nivel de esquema.
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}); Vale la pena señalar que db.collection.ensureIndex está en desuso (por mongodb) y ahora es un alias para db.collection.createIndex .
Puede establecer el nombre del índice utilizando la propiedad de name del parámetro de opción de la llamada de index :
ExampleSchema.index({a: 1, b: 1, c: 1}, {name: 'my_index'}); ExampleSchema.index({d:1, e:1}, {name: 'my_other_index', unique: true}); Como se indica en los documentos , el segundo parámetro de index contiene:
Opciones para pasar a la función
createIndex()del controlador MongoDB
El documento createIndex enumera todas las configuraciones de opciones posibles, incluido el name .
Resulta que Mongoose envuelve el controlador Mongo de forma bastante transparente.
Como tal, una llamada a <Mongoose.Schema>.index(<keys>, <options>) puede interpretarse aproximadamente como una llamada a db.collection.ensureIndex(keys, options) o db.collection.createIndex(keys, options) en Mongo 3.0+.
Por lo tanto, la sintaxis requerida (aunque mal documentada) es idéntica a la sintaxis de MongoDB para declaraciones de índice de esquema .
Es decir, declaramos los nombres de la siguiente manera:
ExampleSchema.index({a: 1, b: 1, c: 1}, {name: "ExampleIndexName_ABC"}); ExampleSchema.index({d:1, e:1}, {unique: true, name: "ExampleCompoundIndexName"});Las opciones también incluyen:
backgrounduniquenamepartialFilterExpressionsparseexpireAfterSecondsstorageEngineConsulte los documentos oficiales de MongoDB para obtener más detalles.