Search code examples
javascriptnode.jsmongodbmongoosemongodb-query

Add field not in schema with mongoose


I am trying to add a new field to a document, but this isn't working:

Creating my UserModel prototype:

model = require("../models/user")
UserModel.prototype.findOneAndUpdate = function(query, params, cb) {
    model.findOneAndUpdate(query, params, { returnNewDocument: true, new: true }, function(err, data) {
        if (!err) {
            cb(false, data);
        } else {
            cb(err, false);
        }
    });
};

Then calling it

userFunc = require("../../model_functions/user")

userFunc.findOneAndUpdate({
    "email.value": userEmail
}, {
    $set: {"wat":"tf"}
},
function (err, updatedUser) {
    //This logs the updated user just fine, but the new field is missing
        console.log(updatedUser);
                  ...
});

This successfully updates any field as long as it exists, but it won't add any new one.


Solution

  • You can add and remove fields in schema using option { strict: false }

    option: strict

    The strict option, (enabled by default), ensures that values passed to our model constructor that were not specified in our schema do not get saved to the db.

    var thingSchema = new Schema({..}, { strict: false });
    

    And also you can do this in update query as well

    Model.findOneAndUpdate(
      query,  //filter
      update, //data to update
      { //options
        returnNewDocument: true,
        new: true,
        strict: false
      }
    )
    

    You can check the documentations here