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
No one has answered this question yet
Check out similar questions: