我的应用是关于大学搜索,会有两种用户,一种是搜索大学的最终用户,另一种是大学所有者。
我正在为这两类用户维护一个共同的'用户'集合。它的架构如下所示
{
_id : ObjectId(),
display_name: String,
email: String,
password_hash: String,
type :Number
}
现在,此应用程序的管理员想要向用户发送通知,此通知可能适用于所有用户或特定用户或学院所有者或一组用户。
通知文件包含以下三个内容,
{
_id : ObjectId(),
notification_message: String,
date: Date
}
现在我要做的是点击一个api,它给我一个特定用户的所有通知,以及每个通知的一个标志字段,表示通知是读还是未读。
现在我的数据库设计应该如何?
我想到了两个选择,
我想维护一个通知集合,并为通知的每个目标用户重复通知文档,我也会在此文档中将字段维护为“标记为已读”,文档将如下所示
{
_id : ObjectId(),
notification_message: String,
date: Date,
to_user_id : ObjectId(),
mark_as_read: Boolean
}
优点:查询特定用户的通知会更快
缺点:对于每个通知,“通知”集合将增加 因为我在重复相同的通知,所以大幅提升 通知集合为许多用户提供通知 意图是。
2.我想维护一个通知集合,并且对于每个通知文档,我维护了该通知的一组用户以及已阅读此通知的一组用户
优点:通知集合大小可能更少
缺点:通知文档的最大大小可能达到16 MB
这些只是我能想到的两件事,还有其他更好的方法吗?非常感谢您的帮助。
答案 0 :(得分:0)
这个怎么样?
{
sender: Object, // user object
receiver: [ String ] //array of user _ids
message: String, // any description of the notification message
read_by: [{ readerId: String, read_at: Date }],
created_at: Date,
}