【问题标题】:Sailsjs. Best way to create (and manage) indexes on sails-mongo (mongodb)帆。在sails-mongo(mongodb)上创建(和管理)索引的最佳方法
【发布时间】:2018-10-25 20:30:18
【问题描述】:

我使用的是sailsjs 0.12。它还支持models 上的index 属性 我正在使用 npm 包 Sails-hooks-mongoat 创建反向索引等。

这并不理想,但它确实有效。现在他们删除了index 属性,mongoat 目前不安全,等待更新以在 Sails.js 1.0 上运行。

我想知道最好的方法:

  • 在新部署上创建索引。
  • 迁移(确保?)关于部署更新的索引。

【问题讨论】:

标签: mongodb sails.js waterline sails-mongo


【解决方案1】:

由于不允许您在生产环境中运行“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;

然后你可以像这样在引导文件中手动创建缺失的索引:

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 函数的别名,它已被弃用。

参考资料:

Waterline manager reference

MongoDB create index reference

【讨论】:

  • 谢谢迪马斯!那太棒了。我还创建了一个脚本,用于从所有集合中删除所有索引,以防索引迁移。
  • 或者简单地说:npm i --save sails-hook-mongo-index 它将自动确保索引。
【解决方案2】:

在开发模式下,您可以在 Sails 中的模型中指定自定义索引,或者在提升服务器和执行迁移时将其删除。

我的(首选)替代方法是在数据库中自行管理所有索引。为此,您必须在 models.js 配置文件中将“migrate”属性从“alter”更改为“safe”。

请注意,在生产模式下,“迁移”属性始终设置为“安全”。

【讨论】:

  • 您是否使用任何工具来创建索引和模型。或者你手头上的索引是一个索引?
猜你喜欢
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
相关资源
最近更新 更多