Careeroza
Setup and Schemas
When MongoDB
MongoDB stores JSON-like documents. It fits data with flexible shapes: product reviews, activity feeds, logs, chat messages. Orders and payments usually stay in a relational database for transactions and joins.
Example
npm i @nestjs/mongoose mongooseExample output
added 24 packages in 5s
A Schema with Decorators
src/reviews/schemas/review.schema.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { HydratedDocument } from 'mongoose';
@Schema({ timestamps: true, collection: 'reviews' })
export class Review {
@Prop({ required: true, index: true })
productId: number;
@Prop({ required: true })
userId: number;
@Prop({ required: true, min: 1, max: 5 })
rating: number;
@Prop({ maxlength: 2000 })
comment?: string;
@Prop({ type: [String], default: [] })
images: string[];
@Prop({ default: false })
verifiedPurchase: boolean;
}
export type ReviewDocument = HydratedDocument<Review>;
export const ReviewSchema = SchemaFactory.createForClass(Review);
ReviewSchema.index({ productId: 1, userId: 1 }, { unique: true }); // one review per user per productsrc/app.module.ts and src/reviews/reviews.module.ts
// app.module.ts
@Module({
imports: [
MongooseModule.forRootAsync({
inject: [ConfigService],
useFactory: (config: ConfigService) => ({ uri: config.getOrThrow<string>('MONGODB_URI') }),
}),
ReviewsModule,
],
})
export class AppModule {}
// reviews.module.ts
@Module({
imports: [MongooseModule.forFeature([{ name: Review.name, schema: ReviewSchema }])],
controllers: [ReviewsController],
providers: [ReviewsService],
})
export class ReviewsModule {}