gpt4 book ai didi

node.js - 使用 MongoDB 存储通知(以及读取状态)

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:38 25 4
gpt4 key购买 nike

这是使用 MongoDB 存储通知的有效方法吗?我想跟踪过去的通知以及用户是否已阅读该通知。

NotificationSchema: {
title: {type: String, required: true},
context: {type: String, required: true},
createdAt: {type: Date, default: Date.now(), required: true},
readBy: [
userObjectID: {type: mongoose.Schema.Types.ObjectId, required: true},
readAt: {type: Date, required: true, default: Date.now()}
]
}

我担心的是,当列表变大时,每个用户都必须遍历整个“readBy”字段才能确定用户是否已阅读它。

我是否还应该在 UserSchema 中存储一个字段来记录用户读取的所有通知?

谢谢!欢迎任何意见。

最佳答案

您可以考虑创建一个额外的中间模型,例如 UserNotification,并从 Notification 中删除 readBy 数组字段。

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const NotificationSchema = new Schema({
title: { type: String, required: true },
context: { type: String, required: true },
createdAt: { type: Date, default: Date.now(), required: true }
});

const UserSchema = new Schema({
username: { type: String, required: true }
});

const UserNotificationSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
ref: "User"
},
notification: {
type: Schema.Types.ObjectId,
ref: "Notification"
},
readAt: { type: Date, required: true, default: Date.now() }
});

module.exports = {
Notification: mongoose.model("Notification", NotificationSchema),
User: mongoose.model("User", UserSchema),
UserNotification: mongoose.model("UserNotification", UserNotificationSchema)
};

通过这种设计,添加 UserNotification 只需要在一个集合中进行简单的插入,并且我们的通知和用户架构不会受到污染。

但是我们需要设置virtual populate在通知和用户模式上能够引用 UserNotification。您可以查看this回答如何设置虚拟填充的示例。

关于node.js - 使用 MongoDB 存储通知(以及读取状态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60494903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com