Vì bạn không được phép chạy 'migrate:alter' trong sản xuất (ngay cả khi bạn thử), một tùy chọn là tạo chỉ mục đó trong tệp bootstrap ('config / bootstrap.js').
Hãy tưởng tượng bạn có một mô hình Người dùng như thế này:
var User = {
attributes: {
email : { type: 'string', unique: true, required: true },
username : { type: 'string', unique: true, required: true },
pin: { type: 'string'}
}
};
module.exports = User;
Sau đó, bạn có thể tạo thủ công các chỉ mục bị thiếu như thế này trong tệp bootstrap:
module.exports.bootstrap = async function(done) {
console.log("Loading bootstrap...")
if (process.env.NODE_ENV === 'test') {
}
if (process.env.NODE_ENV === 'production') {
console.log("CREATING DATABASE INDEX BY HAND")
// USER MODEL
var db = User.getDatastore().manager;
await db.collection(User.tableName).createIndex( { email: 1 }, {unique: true} );
await db.collection(User.tableName).createIndex( { username: 1 }, {unique: true} );
// PANDA MODEL
// db = Panda.getDatastore().manager;
// await db.collection(Panda.tableName).createIndex( { name: 1 }, {unique: true} );
}
// await initializeDatabase() // custom DB initialization...
return done();
};
Chỉ mục chỉ được tạo một lần, các lần chạy tiếp theo sẽ không tạo lại các chỉ mục đó. ensureIndex là một bí danh của hàm createIndex và nó đã không được dùng nữa.
Tài liệu tham khảo:
Tham chiếu trình quản lý đường nước
MongoDB tạo tham chiếu chỉ mục