NestJS module that provides seamless integration between NestJS and Mongoose ODM for MongoDB database operations
80
Pending
Does it follow best practices?
Impact
80%
1.02xAverage score across 10 eval scenarios
Pending
The risk profile of this skill
Core module classes for setting up MongoDB connections and registering models in NestJS applications. The module system provides both synchronous and asynchronous configuration options with support for multiple database connections.
Main module for integrating Mongoose with NestJS applications.
class MongooseModule {
/**
* Configure the root MongoDB connection
* @param uri - MongoDB connection string
* @param options - Connection options
* @returns DynamicModule for root configuration
*/
static forRoot(uri: string, options?: MongooseModuleOptions): DynamicModule;
/**
* Configure the root MongoDB connection asynchronously
* @param options - Async configuration options
* @returns DynamicModule for async root configuration
*/
static forRootAsync(options: MongooseModuleAsyncOptions): DynamicModule;
/**
* Register models for dependency injection
* @param models - Array of model definitions (defaults to empty array)
* @param connectionName - Optional connection name for multi-database setup
* @returns DynamicModule for feature registration
*/
static forFeature(models?: ModelDefinition[], connectionName?: string): DynamicModule;
/**
* Register models asynchronously for dependency injection
* @param factories - Array of async model factories (defaults to empty array)
* @param connectionName - Optional connection name for multi-database setup
* @returns DynamicModule for async feature registration
*/
static forFeatureAsync(factories?: AsyncModelFactory[], connectionName?: string): DynamicModule;
}Usage Examples:
// Basic connection
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost/nest'),
],
})
export class AppModule {}
// Connection with options
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost/nest', {
retryAttempts: 5,
retryDelay: 1000,
connectionName: 'users-db',
}),
],
})
export class AppModule {}
// Async configuration with ConfigService
@Module({
imports: [
MongooseModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
uri: configService.get<string>('MONGODB_URI'),
retryAttempts: 5,
}),
inject: [ConfigService],
}),
],
})
export class AppModule {}
// Register models
@Module({
imports: [
MongooseModule.forFeature([
{ name: User.name, schema: UserSchema },
{ name: Product.name, schema: ProductSchema, collection: 'products' }
]),
],
})
export class UsersModule {}Configuration options for Mongoose module connections.
interface MongooseModuleOptions extends ConnectOptions {
/** MongoDB connection URI */
uri?: string;
/** Number of retry attempts for failed connections */
retryAttempts?: number;
/** Delay between retry attempts in milliseconds */
retryDelay?: number;
/** Name for this connection (for multiple databases) */
connectionName?: string;
/** Factory function to customize the connection */
connectionFactory?: (connection: any, name: string) => any;
/** Factory function to customize connection errors */
connectionErrorFactory?: (error: MongooseError) => MongooseError;
/** Whether to defer connection until first use */
lazyConnection?: boolean;
/** Callback when connection is created */
onConnectionCreate?: (connection: Connection) => void;
/** Enable verbose retry logging */
verboseRetryLog?: boolean;
}Options for asynchronous module configuration.
interface MongooseModuleAsyncOptions {
/** Name for this connection (for multiple databases) */
connectionName?: string;
/** Modules to import for dependencies */
imports?: any[];
/** Use existing options factory */
useExisting?: Type<MongooseOptionsFactory>;
/** Use class as options factory */
useClass?: Type<MongooseOptionsFactory>;
/** Factory function to create options */
useFactory?: (...args: any[]) => Promise<MongooseModuleFactoryOptions> | MongooseModuleFactoryOptions;
/** Dependencies to inject into factory function */
inject?: any[];
}Factory interface for creating module options.
interface MongooseOptionsFactory {
/**
* Create Mongoose module options
* @returns Options object or promise of options
*/
createMongooseOptions(): Promise<MongooseModuleOptions> | MongooseModuleOptions;
}Factory options excluding connection name.
type MongooseModuleFactoryOptions = Omit<MongooseModuleOptions, 'connectionName'>;Interface for defining models to register.
interface ModelDefinition {
/** Model name for dependency injection */
name: string;
/** Mongoose schema for the model */
schema: any;
/** Optional collection name override */
collection?: string;
/** Optional discriminator schemas */
discriminators?: DiscriminatorOptions[];
}Factory interface for asynchronously created models.
interface AsyncModelFactory {
/** Model name for dependency injection */
name: string;
/** Optional collection name override */
collection?: string;
/** Optional discriminator schemas */
discriminators?: DiscriminatorOptions[];
/** Modules to import for dependencies */
imports?: any[];
/** Factory function to create schema */
useFactory: (...args: any[]) => ModelDefinition['schema'] | Promise<ModelDefinition['schema']>;
/** Dependencies to inject into factory function */
inject?: any[];
}Options for discriminator models.
interface DiscriminatorOptions {
/** Discriminator name */
name: string;
/** Discriminator schema */
schema: Schema;
/** Optional discriminator value */
value?: string;
}docs
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10