我使用的是sailsjs 0.12。它支持index
上的models
属性,我也使用npm包Sails-hooks-mongoat
创建反向索引等等。
这不是理想的,但它确实奏效了。现在他们删除了index
属性,mongoat目前是不安全的,等待更新可以在Sails.js 1.0上运行。
我想知道最好的方法:
由于您不允许在生产中运行'migrate:alter'(即使您尝试),一个选项是在引导程序文件('config / bootstrap.js')中创建这些索引。
想象一下,你有一个像这样的用户模型:
var User = {
attributes: {
email : { type: 'string', unique: true, required: true },
username : { type: 'string', unique: true, required: true },
pin: { type: 'string'}
}
};
module.exports = User;
然后你可以在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();
};
索引只创建一次,后续运行不会重新创建这些索引。 ensureIndex是createIndex函数的别名,已被弃用。
参考文献:
在开发模式下,您可以在Sails中的模型中指定自定义索引,或者在提升服务器和执行迁移时将其删除。
我(首选)替代方法是在DB中自己管理所有索引。为此,您必须在models.js配置文件中将“migrate”属性从“alter”更改为“safe”。
请注意,在生产模式下,“migrate”属性始终设置为“safe”。