如何只获取Mongoose鉴别器基本模型的字段



我有一个用于系统中所有用户的基本模型,称为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' })(其中userUser.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
}

最新更新