我有一个用于系统中所有用户的基本模型,称为User
。我还有一个Self
模型来保存用户的属性,这些属性应该只有当前用户才能访问(例如,电子邮件地址,因为它是私有的(。Self
是一个鉴别器,它继承自User
。
const userSchema = new mongoose.Schema<IMongooseUser>({ username: String, ... });
export const User = mongoose.model('User', userSchema);
const selfSchema = new mongoose.Schema<IMongooseSelf>({ email: String, ... });
export const Self = User.discriminator('Self', selfSchema);
因此,我在DB中的所有用户都有__t: 'Self'
,所以当我使用User.findOne()
时,它也会返回所有Self
字段。有没有办法强制Mongoose只返回基本的User
字段?
我的解决方案atm使用new User({ ...user, __t: 'User' })
(其中user
是User.findOne().lean()
的返回值(,但这是一个非常手动的解决方案。有更好的吗?也许是我可以改变的选择?
我对其他方式持开放态度,可以强制不从文档中返回私有字段。
您可以在投影中排除Self属性。。。实例
const res = await User.findOne({username:"test"}, "-email").exec();
console.log(res)
结果;
{
_id: new ObjectId("62da6c9e81f12d914120c702"),
username: 'test',
__t: 'Self',
__v: 0
}