Mongoose: saving nested models

I am having problems persisting nested models in Mongoose. I have three models that are nested in this order:

var userSchema = new mongoose.Schema({
    googleId: {type: String, unique: true, required: true},
    name: {type: String, required: true},
    data: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Activity' }]
});

var activitySchema = new mongoose.Schema({
    name: String,
    active: Boolean,
    selected: Boolean,
    idle: Boolean,
    data: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Data' }]
});

var dataSchema = new mongoose.Schema({
    date: String,
    time: {type: Number, default: 0},
    timestamp: {type: Number, default: 0}
});

      

By the time I would like to update the user instance, the User has already been created and exists in my database. I read that nested objects are not automatically updated and persist in Mongoose. When checking records, the entry for the sample user looks like this

_id: ObjectId("553423830b308818093188ff")
googleId: "XXXXXXXXXXXXXXXXXXXXX"
name: "Sample name"
data: ["ObjectId(5534238c0b30881809318900)"]

      

How do I insert my data into my database? How can I ensure that my nested models are preserved? I am currently using the code like this:

var data;

// "data" is populated with data to create "Activity" and "Data" models

User.findOne({
    'googleId': user.googleId
}, function(err, user) {
    if (err) {
        return done(err);
    }

    for (var i = 0; i < data.length; i++){
        var newActivity = new Activity({
            //populate fields from "data"
        });

        for (var j = 0; j < data[i].data.length; j++){
            var newData = new Data({
                //populate fields from "data"
            });

            newActivity.data.push(newData);
        }

        user.data.push(newActivity);
    }

    // Save user
    user.save(function(err){
        if (err) {
            console.log(err);
        }
    });
});

      

+3


source to share





All Articles