MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Sailsjs. Beste Möglichkeit zum Erstellen (und Verwalten) von Indizes für Segel-Mongo (mongodb)

Da es Ihnen nicht erlaubt ist, 'migrate:alter' in der Produktion auszuführen (selbst wenn Sie es versuchen), besteht eine Möglichkeit darin, diesen Index in der Bootstrap-Datei ('config/bootstrap.js') zu erstellen.

Stellen Sie sich vor, Sie haben ein Benutzermodell wie dieses:

var User = {
  attributes: {
    email     : { type: 'string', unique: true, required: true },
    username  : { type: 'string', unique: true, required: true },
    pin: { type: 'string'}
  }
};

module.exports = User;

Dann können Sie die fehlenden Indizes manuell wie folgt in der Bootstrap-Datei erstellen:

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();
};

Der Index wird nur einmal erstellt, nachfolgende Läufe werden diese Indizes nicht neu erstellen. Der sichereIndex war ein Alias ​​für die createIndex-Funktion und ist veraltet.

Referenzen:

Waterline-Manager-Referenz

MongoDB-Erstellungsindexreferenz