我的用户中有一个电话字段。问题是我无法将其发送到前台(安全性和全部)。所以我想做一个虚拟的领域,以了解该用户是否给了他的电话。
此处架构:
const userSchema = new Schema({
phone: { type: String}
},{
toObject: {virtuals: true },toJSON: {virtuals: true }
});
虚拟的:
userSchema.virtual('hasPhone')
.get(function () {
return Boolean(this.phone);
})
我要选择字段:
const publicFields = ['-phone'];
userSchema.statics.publicOnly = function (queryObject) {
return queryObject.select(publicFields);
}
并像这样使用它:
getUserById(userId,all = false) {
const query = User.findById(userId);
return (!all ? User.publicOnly(query) : query).exec();
}
如果我在其中发送all = true,我会得到电话。
因此,在我的选择中,我排除了电话,但在那种情况下,虚拟用户不再拥有电话,无法正常工作。
我的目标是在拥有hasPhone的同时仍保护手机
感谢您的帮助