-
-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Closed
Labels
confirmed-bugWe've confirmed this is a bug in Mongoose and will fix it.We've confirmed this is a bug in Mongoose and will fix it.
Milestone
Description
Prerequisites
- I have written a descriptive issue title
- I have searched existing issues to ensure the bug has not already been reported
Mongoose version
6.5.2
Node.js version
16.15.0
MongoDB server version
4.2.1
Description
Virtuals can be defined using options.virtuals
in Schema
constructor, or schema.virtual()
method. If virtuals are defined using the schema.virtual()
method, discriminator works fine. However, when defining virtuals using the options.virtuals
approach, calling model.discriminator()
throws error Error: Can't customize discriminator option virtuals (can only modify toJSON, toObject, _id, id)
.
Steps to Reproduce
const baseSchema = new mongoose.Schema({
name: String,
}, {
virtuals: {
virtualA: {
get: () => 'virtualA',
}
}
});
const discriminatorSchema = new mongoose.Schema({
prop: String,
});
discriminatorSchema.virtual('virtualB').get(() => 'virtualB');
const BaseModel = mongoose.model('DiscriminatedModelBeta', baseSchema);
const DiscriminatorModel = BaseModel.discriminator('D', discriminatorSchema);
const doc = new BaseModel({
__t: 'D',
});
doc.virtualA.should.equal('virtualA');
doc.virtualB.should.equal('virtualB');
The code above defines virtuals using schema.virtual()
methos. It works as expected.
const baseSchema = new mongoose.Schema({
name: String,
}, {
virtuals: {
virtualA: {
get: () => 'virtualA',
}
}
});
const discriminatorSchema = new mongoose.Schema({
prop: String,
}, {
virtuals: {
virtualB: {
get: () => 'virtualB',
}
}
});
const BaseModel = mongoose.model('DiscriminatedModelAlpha', baseSchema);
const DiscriminatorModel = BaseModel.discriminator('D', discriminatorSchema);
const doc = new BaseModel({
__t: 'D',
});
doc.virtualA.should.equal('virtualA');
doc.virtualB.should.equal('virtualB');
The code above defines virtuals using options.virtual
option. It throws error when calling BaseModel.discriminator()
.
Error: Can't customize discriminator option virtuals (can only modify toJSON, toObject, _id, id)
Expected Behavior
Discriminator should handle virtuals defined using options.virtuals
option in Schema
constructor.
Metadata
Metadata
Assignees
Labels
confirmed-bugWe've confirmed this is a bug in Mongoose and will fix it.We've confirmed this is a bug in Mongoose and will fix it.