我有情况,正在寻求建议
我有一个USER_SCHEMA
,该用户在其中有联系人,是其他用户的数组:
export const USER_SCHEMA: Schema = new Schema({
name: {type: String, trim: true},
email: {type: String, lowercase: true, trim: true, unique: true, required: true},
emailVerified: {type: Boolean, required: true, default: false, select: false},
password: {type: String, required: true, select: false},
contacts: [{type: Schema.Types.ObjectId, ref: 'User'}],
});
用户通过其email
地址找到联系人,并且是否返回该用户,这取决于他是否在数据库中存在并经过验证。
我希望用户可以在实际注册之前将其添加为联系人,并且在数据库中不列出该用户。
正如我现在所看到的,我唯一的选择是在SCHEMA
中创建另一个字段,其中包含String
的{{1}}数组:
Emails
假设某个用户为unregisteredContacts: [{type: String, lowercase: true, trim: true, select: false}]
,我可以查找在尚未通过以下方式注册该新验证用户的用户:
emailVerfied: true
然后,对于找到的每个用户,我可以从const SELF = await SelfRoute.User.findById(req['userID'])
const USERS = await this.User.find({ unregisteredContacts: SELF.email })
数组中删除该值,并将unregisteredContacts
推入SELF._id
数组(类型为contacts
)中
但是从直觉上看,这似乎不是最佳的性能实践,而且我很好奇是否有一种方法可以使这种联系方式描述如下:
Schema.Types.ObjectId
然后当我称之为填充时,它只是填充确实在数据库中列出的用户
好像编写了一种特殊方法,例如contacts: [{type: String, ref: 'User'}] // <-- (verified email string)
,该方法通过电子邮件查找并返回联系人数组中的所有用户(可能找到了某些,而有些则没有)
但这感觉也不是最好的
我觉得我在理解如何处理一个基本的“也许不是”文档问题方面处于十字路口,我正在寻求建议:)