猫鼬通过NOT objectId引用和填充文档

时间:2018-08-28 22:29:42

标签: javascript node.js mongoose mongoose-schema mongoose-populate

我有情况,正在寻求建议

我有一个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),该方法通过电子邮件查找并返回联系人数组中的所有用户(可能找到了某些,而有些则没有) 但这感觉也不是最好的

我觉得我在理解如何处理一个基本的“也许不是”文档问题方面处于十字路口,我正在寻求建议:)

0 个答案:

没有答案