NodeJS 使用MongoDB、Mongoose和Mongo.js为Admin Dashboard实现通知系统

ycggw6v2  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(157)

我正在开发一个拥有超过100,000名用户的管理 Jmeter 板。我希望使用MongoDB,Mongoose和MongoDB. js实现一个通知系统。目标是可以选择从 Jmeter 板向选定的用户或所有用户发送消息,通知文本对所有收件人都是相同的。
我想避免为每个用户创建一个单独的通知对象,而是在MongoDB、Mongoose和Mongo.js堆栈中找到一种有效的方法来处理这个问题。
以下是关键要求:
系统应该允许管理员发送相同的通知文本到选定的用户或所有用户。我想尽量减少为每个用户创建单独的通知对象。通知系统应该是可扩展的大量用户(超过100,000)。我已经有了一个MongoDB模式用于通知,但我正在寻求有关处理通知逻辑和有效管理大型用户群通知的最佳方法的指导。
如果有人对如何构建MongoDB模式、设计MongoDB. 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);

字符串

fjaof16o

fjaof16o1#

为了更好地回答这个问题,您需要提供更好的上下文,说明您希望通知如何工作。您希望通知在点击发送时发送给所有用户,还是将其放在他们的收件箱中,直到他们下次登录并看到通知?通知是一次性的,还是用户应该能够重新阅读旧的通知,就像社交媒体一样?
一般来说,做出决定的主要标准是用户是否需要对自己的通知进行一些控制(例如“标记为未读”,查看旧通知,对它们进行分类等选项)。
如果这确实是你想要的,那么为你的通知构建一个更以用户为中心的模式会更有意义:

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)创建索引是一个好主意,因为您拥有的用户数量,每个通知都会在您的集合中创建许多文档,查询很快就会变慢。

相关问题