У меня есть схема Item, у которой есть свойство owner, которое я использовал для ссылки на пользовательскую схему ... теперь я пытаюсь заполнить владельца, не получая виртуальные поля userSchema, вот мои схемы.
Схема пользователя
let userSchema = new mongoose.Schema({
name: {type: String},
email: {type: String},
phoneNumber: {
type: String,
required: true,
trim: true
},
devices: [String],
verified: {
phoneNumber: {
type: Boolean,
default: false
}
},
settings: {
showNumber: {type: Boolean},
showEmail: {type: Boolean}
},
role: {
type: String,
enum: constants.user.roles,
required: true,
default: constants.user.defaultRole
}
});
userSchema.virtual('isPhoneVerified').get(function () {
return !!this.verified.phoneNumber;
});
module.exports = mongoose.model('user', userSchema);
Элемент Схема
let itemSchema = new mongoose.Schema({
title: {type: String, required: true},
price: {type: Number},
owner: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user',
require: true
}
});
let autoPopulate = function(next) {
this.populate({
path: 'owner',
select: {name: 1, _id: 0, isPhoneVerified: 0}
});
next();
};
itemSchema.pre('find', autoPopulate);
itemSchema.pre('findOne', autoPopulate);
module.exports = mongoose.model('item', itemSchema);
, поэтому, когда я пытаюсь исключить поле isPhoneVerified
, я получил эту ошибку
MongoError: Projection cannot have a mix of inclusion and exclusion.
Не могли бы вы дать мне совет?
Обновление Я нашел решение для этого случая, используя свойство transform
в toJson
.
userSchema.set('toJson', {
virtuals: true,
getters: true,
transform: function (doc, ret) {
delete ret._id;
delete ret.isPhoneVerified;
return ret;
}
});