MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Séquence d'incrémentation automatique dans NestJs/Mongoose

Il est possible d'enregistrer un plugin pour un schéma donné en utilisant le forFeatureAsync() méthode du MongooseModule avec un fournisseur d'usine (par exemple, useFactory ).

En suivant l'exemple de la documentation officielle :

@Module({
  imports: [
    MongooseModule.forFeatureAsync([
      {
        name: Cat.name,
        useFactory: () => {
          const schema = CatsSchema;
          schema.plugin(require('mongoose-autopopulate'));
          return schema;
        },
      },
    ]),
  ],
})
export class AppModule {}

Cependant avec la mongoose-sequence plugin, il est nécessaire de passer l'objet de connexion natif Mongoose à l'initialisation du plugin. Ceci peut être réalisé en injectant la connexion dans le fournisseur d'usine avec le getConnectionToken méthode :

import {getConnectionToken, MongooseModule} from '@nestjs/mongoose';
import * as AutoIncrementFactory from 'mongoose-sequence';

@Module({
  imports: [
    MongooseModule.forFeatureAsync([
      {
        name: Cat.name,
        useFactory: async (connection: Connection) => {
          const schema = CatsSchema;
          const AutoIncrement = AutoIncrementFactory(connection);
          schema.plugin(AutoIncrement, {inc_field: 'id'});
          return schema;
        },
        inject: [getConnectionToken('YOUR_CONNECTION_NAME')],
      },
    ]),
  ],
})
export class AppModule {}