使用 MongoDB、Mongoose 和 Express.js 为管理仪表板实现通知系统

问题描述 投票:0回答:1

我正在开发一个拥有超过 100,000 个用户的管理仪表板。我希望使用 MongoDB、Mongoose 和 Express.js 实现一个通知系统。目标是可以选择从仪表板向选定用户或所有用户发送消息,并且所有收件人的通知文本都相同。

我希望避免为每个用户创建单独的通知对象,而是在 MongoDB、Mongoose 和 Express.js 堆栈中找到一种有效的方法来处理此问题。

以下是关键要求:

系统应允许管理员向选定的用户或所有用户发送相同的通知文本。 我想尽量减少为每个用户创建单独的通知对象。 通知系统应该能够针对大量用户(超过 100,000)进行扩展。 我已经有一个用于通知的 MongoDB 架构,但我正在寻求有关处理通知逻辑并有效管理大型用户群通知的最佳方法的指导。

如果有人对如何构建 MongoDB 模式、设计 Express.js 路由以及有效处理通知逻辑有经验或建议,我将非常感谢您的见解。

// My current schema looks like this:

const mongoose = require('mongoose');

const notificationSchema = new mongoose.Schema({
  text: { type: String, required: true },
  users: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
  // Other relevant fields
});

const Notification = mongoose.model('Notification', notificationSchema);

node.js mongodb express mongoose mongodb-query
1个回答
0
投票

您需要提供更好的背景信息,说明您希望通知如何发挥作用,以便我们更好地回答这个问题。您是否希望在点击发送时将通知发送给所有用户,还是将其保留在他们的收件箱中,直到他们下次登录并看到通知?通知是一次性的,还是用户应该能够重新阅读旧的通知,就像社交媒体一样?

一般来说,做出决定的主要标准是您的用户是否需要对自己的通知有一定的控制权(例如“标记为未读”、查看较旧的通知、对其进行分类等选项)

如果这确实是您想要的,那么为您的通知构建一个更加以用户为中心的模式会更有意义:

const notificationSchema = new mongoose.Schema({
  text: { type: String, required: true },
  // Other fields relevant to notification information
});
const Notification = mongoose.model('Notification', notificationSchema);

const userFeedSchema = new mongoose.Schema({
  user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
  notificationId: {type: mongoose.Schema.Types.ObjectId, ref: 'Notification'},
  // Other fields you might need such as isSeen, isClicked, or createdAt
  };
});
const UserFeed = mongoose.model('UserFeed', userFeedSchema);

通过这种方法,您可以隔离通知包含的信息,并将用户与他们需要查看/已经查看的通知相关联。

使用

notificationSchema
上的 (notificationId) 和
userFeedSchema
上的 (userId, notificationId) 创建索引将是一个好主意,因为您拥有大量用户,并且每个通知都会在您的集合中创建许多文档,并且查询很快就会变慢。

© www.soinside.com 2019 - 2024. All rights reserved.