帆。在sails-mongo (mongodb) 上创建(和管理)索引的最佳方式

Gus*_*cia 5 mongodb sails.js waterline sails-mongo

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

这并不理想,但它奏效了。现在他们放弃了该index属性,并且 mongoat 目前不安全并且等待更新以在 Sails.js 1.0 上工作。

我想知道最好的方法是:

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

Dim*_*cco 4

由于不允许您在生产中运行“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;
Run Code Online (Sandbox Code Playgroud)

然后您可以在引导文件中手动创建丢失的索引,如下所示:

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();
};
Run Code Online (Sandbox Code Playgroud)

该索引仅创建一次,后续运行不会重新创建这些索引。EnsureIndex是 createIndex 函数的别名已被弃用。

参考:

水线管理器参考

MongoDB创建索引参考