Search code examples
node.jsmongoosemongoose-schemamongoose-populate

how to use model1 reference in model2 so that changes in model1 reflects in model2 automatically


I have two model group model and user model

user model :

var mongoose    =   require('mongoose');
var userSchema  = mongoose.Schema({
     profilePic : String,
     firstName  : String,
     lastName   : String,
     dateOfBirth_DateObject     : { 
        type : Date ,   
        default : Date(1994-03-18)
     },
     yearOfBirth_Integer : { 
        type : Number,  
        default : 0 
     },
     monthOfBirth_Integer  : { 
        type : Number,  
        default : 0 
     },
     dayOfBirth_Integer : { 
        type : Number,  
        default : 0 
     },
     gender_String  : String
)};
module.exports = mongoose.model('user', userSchema,'user');

group model :

var mongoose       =   require('mongoose');
var groupSchema    =   mongoose.Schema({
   members      :   [{
        id      :   {
           type : mongoose.Schema.Types.ObjectId,
           ref  : 'user'
        },
        firstName   :   String,
        lastName    :   String,
        profilePic :    String

    }]
});

module.exports     =    mongoose.model('group', groupSchema,'group');

so when user uploads new profile pic, url of that pic has been saved in user model but profile pic of that user should also automatically change in group members array.


Solution

  • You just need to change your schema into

    var groupSchema = mongoose.Schema({members : [{
        id      :   {
           type : mongoose.Schema.Types.ObjectId,
           ref  : 'user'
        },
        otherprop1:   String,
        otherprop2  :   String,
    
    }]});
    

    Then use populate to get user data in find

    group.find({}).populate({path:"user", select: "firstName lastName profilePic"})