帆船。在 sails-mongo (mongodb) 上创建(和管理)索引的最佳方式
Sailsjs. Best way to create (and manage) indexes on sails-mongo (mongodb)
我使用的是 sailsjs 0.12。它支持 models
上的 index
属性,也
我正在使用 npm 包 Sails-hooks-mongoat
创建反向索引等。
这并不理想,但它奏效了。现在他们删除了 index
属性并且 mongoat 当前不安全并且等待更新以在 Sails.js 1.0.
上工作
我想知道最好的方法:
- 为新部署创建索引。
- 在部署更新时迁移(确定?)索引。
在开发模式下,您可以在 Sails 中的模型中指定自定义索引,否则它将在提升服务器和执行迁移时删除它们。
我的(首选)替代方法是在数据库中自行管理所有索引。为此,您必须在 models.js 配置文件中将 "migrate" 属性从 "alter" 更改为 "safe"。
请注意,在生产模式下 "migrate" 属性始终设置为 "safe"。
由于您不允许在生产环境中 运行 'migrate: alter'(即使您尝试),一种选择是在 bootstrap 文件中创建这些索引('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();
};
索引只创建一次,后续的 运行s 将不会重新创建这些索引。
ensureIndex 是 createIndex 函数的别名,已被弃用。
参考文献:
我使用的是 sailsjs 0.12。它支持 models
上的 index
属性,也
我正在使用 npm 包 Sails-hooks-mongoat
创建反向索引等。
这并不理想,但它奏效了。现在他们删除了 index
属性并且 mongoat 当前不安全并且等待更新以在 Sails.js 1.0.
我想知道最好的方法:
- 为新部署创建索引。
- 在部署更新时迁移(确定?)索引。
在开发模式下,您可以在 Sails 中的模型中指定自定义索引,否则它将在提升服务器和执行迁移时删除它们。
我的(首选)替代方法是在数据库中自行管理所有索引。为此,您必须在 models.js 配置文件中将 "migrate" 属性从 "alter" 更改为 "safe"。
请注意,在生产模式下 "migrate" 属性始终设置为 "safe"。
由于您不允许在生产环境中 运行 'migrate: alter'(即使您尝试),一种选择是在 bootstrap 文件中创建这些索引('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();
};
索引只创建一次,后续的 运行s 将不会重新创建这些索引。 ensureIndex 是 createIndex 函数的别名,已被弃用。
参考文献: