Home > Software design >  can i used multiple schema for single collection name?
can i used multiple schema for single collection name?

Time:12-27

i'm trying to create diffrent schema for single collection just like User or subUser and i want to store both User or subuser data in same collection but schema want diffrent here is my schema file

export const AryaSchema = new mongoose.Schema({
  first_name: { type: String, required: true },
  last_name: { type: String, required: true },
  userName: { type: String, unique: true, required: true },
  email: { type: String, unique: true, required: true },
  password: { type: String, required: true },
  type: {type:String,default:'subadmin'},
  adhar:{type:String, required:true},
  is_active:{type:Boolean,default:true},
  higher_education:{type:String},
  total_experience:{type:String}
  // status:{type:String,default:true}
}, { timestamps: true })

and here is my module file and i want to know how can i write used diffrent schema for single collection and store user or subuser data in same collection with diffrent schema


@Module({
    imports: [MongooseModule.forFeature([
        { name: 'Member', schema: MemberSchema },{name:'Member',schema:AryaSchema}
    ]),MemberAddressModule],
   
    providers: [ MemberService,AuthService, JwtStrategy,AryaService],
    controllers: [authController,AryaController]
})

And here is my Subuser schema file

export const MemberSchema = new mongoose.Schema({
  first_name: { type: String, required: true },
  last_name: { type: String, required: true },
  userName: { type: String, unique: true, required: true },
  email: { type: String, unique: true, required: true },
  password: { type: String, required: true },
  type: {type:String,default:'subadmin'},
  adhar:{type:String, required:true},
  is_active:{type:Boolean,default:true}
}, { timestamps: true })

CodePudding user response:

In my opinion it's not a best practice.

If two models properties same, You can add a field name user_type and fill it by values of 'user' or 'sub_user' to know differents.

Or if they are two separate model you should define schema for each model.

Note: for validate each model you can use nest js request validations to get correct data for each model. (Validate models in your request not in mongoose)

CodePudding user response:

Mongoose have a feature called Discriminators for that use case.

Discriminators are a schema inheritance mechanism. They enable you to have multiple models with overlapping schemas on top of the same underlying MongoDB collection.

  • Related