Sailsjs. Лучший способ создавать (и управлять) индексами в Sails-Mongo (mongodb)

Я использовал паруса js 0.12. Он поддерживал атрибуты index для models, также я использовал пакет npm Sails-hooks-mongoat для создания обратного индексы и так далее.

Это было не идеально, но это сработало. Прямо сейчас они удалили атрибут index, а mongoat в настоящее время небезопасен и ожидает обновлений для работы с Sails.js 1.0.

Я хотел бы знать лучший подход к:

  • Создавайте индексы для новых развертываний.
  • Перенесите (убедитесь?) индексы в обновлениях развертывания.

person Gustavo Garcia    schedule 15.05.2018    source источник
comment
npmjs.com/package/sails-hook-mongo-index   -  person num8er    schedule 09.02.2020


Ответы (2)


Поскольку вам не разрешено запускать «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 и имеет устарело.

Ссылки:

Справочник менеджера по водным линиям

Ссылка на создание индекса MongoDB

person Dimas Crocco    schedule 25.02.2019
comment
Спасибо Димас! Замечательно. Я также создал скрипт, который удаляет все индексы из всех коллекций в случае переноса индексов. - person Gustavo Garcia; 27.02.2019
comment
или просто: npm i --save sails-hook-mongo-index он автоматически обеспечит индексы. - person num8er; 09.02.2020

В режиме разработки вы можете указать пользовательские индексы в модели в Sails, или они будут удалены при подъеме сервера и выполнении миграции.

Мой (предпочтительный) альтернативный подход состоит в том, чтобы самостоятельно управлять всеми индексами в БД. Для этого вам нужно изменить атрибут «мигрировать» с «изменить» на «безопасный» в файле конфигурации models.js.

Обратите внимание, что в рабочем режиме для атрибута «миграция» всегда установлено значение «безопасно».

person saccodd    schedule 28.06.2018
comment
Используете ли вы какой-либо инструмент для создания индексов и моделей. Или вы всегда идете индекс за индексом под рукой? - person Gustavo Garcia; 04.07.2018