Mongoose save() to update value in array


This had me scratching my head for a while until I figured it out. Let’s say you have a MongoDB model which has an array in it. If you’ve got a reference to a document which you pulled using Mongoose, and you update a value in the array, then you call, the array will not get updated!

Turns out you need to use the document.markModified(arrayName) function calling

Here’s an example. Let’s say your model looks like this:

var UserSchema = new Schema({
  emailSubscriptions: {
    type: Array,
    'default': ["all"]
exports.model = mongoose.model('User', UserSchema);

So after you get a user and modify an array (in this case emailSubscriptions), you’ll need to mark it as modified before saving it:

User.findById(userId, function(err, user) {
  user.emailSubscriptions = ['none'];
  user.markModified('emailSubscriptions');, user) {

Leave a Reply