Change discriminator value/discriminated type in Mongoose Change discriminator value/discriminated type in Mongoose mongoose mongoose

Change discriminator value/discriminated type in Mongoose


In the end I got this to work by doing:

var user = ... // retrieve uservar powerUser = PowerUser.hydrate(user.toObject());powerUser.kind = 'PowerUser';powerUser.save();powerUser = ... // retrieve user again

On a side note, demoting a PowerUser back to User does not appear to be working that way.


have you tried using findOneAndUpdate on the Model

 User.findOneAndUpdate({_id: _user._id}, {$set: {kind: "PowerUser"}, {new: true}, function (err, doc) {        should.not.exist(err);        should.exist(doc.kind);        doc.kind.should.equal('PowerUser');        done();      });

you could use a static method like this in case you also need to remove properties already set. the value new: true is to get the new modified file and strict: false so you can unset values that dont already exist on UserSchema

changes = {kind: "PowerUser"}UserSchema.statics.switchKind = function (id, changes, callBack) {  const unset = {    rank: undefined,    someOtherField: undefined  };  return this.findOneAndUpdate({_id: id}, {$set: changes, $unset: unset}, {new: true, strict: false}, callBack);};