25

I'm calling user.save() on an object, where I set user.signup_date = null;

user.first_name = null;
user.signup_date = null;

user.save();

But when I look at the user in the mongodb it still has the signup_date and first_name set...how do I effectively set this field as empty or null?

chovy
  • 72,281
  • 52
  • 227
  • 295

5 Answers5

54

To remove those properties from your existing doc, set them to undefined instead of null before saving the doc:

user.first_name = undefined;
user.signup_date = undefined;

user.save();

Confirmed as still working in Mongoose 5.9.7. Note that the field you're trying to remove must still be defined in your schema for this to work.

JohnnyHK
  • 305,182
  • 66
  • 621
  • 471
5

Does it make a difference if you try the set method instead, like this:

user.set('first_name', null);
user.set('signup_date', null);
user.save();

Or maybe there's an error when saving, what happens if you do:

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

Does it print anything to the log?

joakimbeng
  • 867
  • 7
  • 9
4

Another option is to define a default value as undefined for these properties.

Something like the following:

let userSchema = new mongoose.Schema({ first_name: { type: String, default: undefined }, signup_date: { type: Date, default: undefined } })

Kfir Erez
  • 3,280
  • 2
  • 18
  • 17
1

Just delete fields

delete user.first_name;
delete user.signup_date;
user.save();
PierrickP
  • 107
  • 7
1

On Mongoose documentation (Schema Types), you can go to the Arrays explanation. There, it says this:

Arrays are special because they implicitly have a default value of [] (empty array).

var ToyBox = mongoose.model('ToyBox', ToyBoxSchema);
console.log((new ToyBox()).toys); // []

To overwrite this default, you need to set the default value to undefined

(I've made an addition inside the toys element)

var ToyBoxSchema = new Schema({
     toys: {
          type: [{
              name: String,
              features: [String]
          }],
          default: undefined
     }
});
Guillem Puche
  • 1,199
  • 13
  • 16