模型中的索引
MongoDB 支援二級索引。在 Mongoose 中,我們在模式中定義這些索引。當我們需要建立複合索引時,必須在模式級別定義索引。
Mongoose 連線
var strConnection = 'mongodb://localhost:27017/dbName';
var db = mongoose.createConnection(strConnection)
建立基本架構
var Schema = require('mongoose').Schema;
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
var usersModel = db.model('users', usersSchema);
module.exports = usersModel;
預設情況下,mongoose 會在模型中新增兩個新欄位,即使這些欄位未在模型中定義。這些領域是:
_ID
如果未將一個模式傳遞給模式建構函式,預設情況下,預設情況下會為每個模式分配一個_id 欄位。分配的型別是 ObjectId,以與 MongoDB 的預設行為一致。如果你根本不想在模式中新增_id,可以使用此選項將其禁用。
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
}, {
_id: false
});
__v 或 versionKey
versionKey 是 Mongoose 首次建立時在每個文件上設定的屬性。此鍵值包含文件的內部修訂版。此文件屬性的名稱是可配置的。
你可以在模型配置中輕鬆禁用此欄位:
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
}, {
versionKey: false
});
複合指數
我們可以建立除 Mongoose 建立的其他索引。
usersSchema.index({username: 1 });
usersSchema.index({email: 1 });
在這些情況下,我們的模型還有兩個索引,一個用於欄位使用者名稱,另一個用於電子郵件欄位。但我們可以建立複合索引。
usersSchema.index({username: 1, email: 1 });
指數表現影響
預設情況下,mongoose 始終按順序為每個索引呼叫 ensureIndex,並在所有 ensureIndex 呼叫成功或出現錯誤時在模型上發出’index’事件。
在 MongoDB 中,ensureIndex 自 3.0.0 版本起不推薦使用,現在是 createIndex 的別名。
建議通過將模式的 autoIndex 選項設定為 false 來禁用該行為,或者通過將選項 config.autoIndex 設定為 false 來全域性連線。
usersSchema.set('autoIndex', false);