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);};