gpt4 book ai didi

node.js - NodeJS通知系统

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:05 26 4
gpt4 key购买 nike

我正在为我的网站创建一个通知系统。类似 facebook 的通知系统。或者stackoverflow。我有 2 个问题。

  1. 如何存储在数据库中?我可以将所有通知存储在用户文档中吗?或者在单独的文档中(因为我认为 monogdb 在文档中的大小受到限制?)或者,智能存储? (使用 inc 或数据库中的值(参见:true/false),查询复杂)

  2. 如何在页面中引入 for ?例如,当我点击收件箱中的stackoverflow链接时,我会重定向到该页面。但我有一个多页系统例如:我有 100 个 friend 。每页列出 30 个。因此,当我单击通知时,我无法重定向到,因为不可能知道正确的页面(可以删除用户)。

非常感谢!如果您有其他想法,请告诉我。谢谢。

编辑:

(抱歉我的英语不好,我是法国人)

对于第一个问题,我意识到我必须等待时间来选择我的结构。因为我的通知..有点复杂,所以提前感受一下。

对于第二个问题,我解决了。我解释:(我以 friend 为例,因为这样很容易理解。)我这样存储数据:

{
friends: [
{_id: xxxxx, ts: xxxx},
{_id: xxxxx, ts: xxxx}
]
}

假设我显示所有 friend :每页 30 个。问题是:

  • 当我想显示所有 friend 时,我无法使用 mongo 进行排序。 (有点问题)
  • 如果我想引导用户访问某个特殊 friend 的此列表(每页 30 个),请始终按 ts 保持排序。我不知道该页面。 uniq的解决方案是获取所有文档。但是:性能非常糟糕。

所以,我像这样存储:

{
friends: {
xxxx: {ts:xxx},
xxxx: {ts:xxx}
}
}

知道我可以使用跳过和限制对文档进行排序。因此,如果我想要一部分,我不需要拿走所有文件。

要了解该页面,我只需对 ts 进行 < 或 > 的数量,例如,我有 11 个 friend ,他们是 > 到我想要的 friend 的 ts,并对所有 friend 进行计数(例如: 50 个 friend )有 50 和 11,我可以猜出页面。

这个解决方案好吗?- 我需要数一下- 查询>或<的数量我可以获取列出 friend 的页面,保持排序

你可能不明白我为什么使用计数。我需要,因为它们不存储在同一个文档中。

2 编辑:

这个解决方案的问题是,我需要在mongo查询之外创建查询对象更新对象(例如:做 friends.xxxxxx: {$exists:true}

ps:对于 mongodb 使用 ts 代替 date 有何优势?我正在使用 ts,但我想我会存储 date,而不是 ts

3 编辑

我会像Sammaye那样做。存储在单独的文档中。看看:http://mongly.com/Multiple-Collections-Versus-Embedded-Documents/#1http://openmymind.net/2012/1/30/MongoDB-Embedded-Documents-vs-Multiple-Collections/

最佳答案

@Stennie 给出了一个相当完整的答案。

但是最近我在 PHP 中为我的网站做了类似的事情。首先要了解的是你是在做通知系统还是墙(两者有很大不同),这对我来说似乎不清楚,我不确定你的意思:

How do for brought at the page ? For exemple, when i click in a link in my inbox for stackoverflow, i'm redirect to the page. But me, i have a system that is multipage for exemple: I have 100 friends. There are listed 30 per page. So when i click on the notification i can't redirect to the because it's impossible to know the good page (users can be removed).

这不是很好的英语,读起来很困惑。如果您可以对此进行扩展,我相信人们可以更好地回答。

对于通知系统,我发现大量通知对象也可以工作。所以我有一个像这样的模式:

{
_id: {},
to_user: ObjectId{},
user_id: ObjectId{}, // Originating user
custom_text: "has posted a new comment on your wall post",
read: false,
ts: MongoDate()
}

这实际上就是我必须生成通知的文档。每次用户提交生成通知的操作时,它都会向数据库写入一个新行,并且每次都会填充每个需要通知的用户的 to_user 。至于多个用户提交相同的操作,我实际上将 user_id 字段转换为 OjbectId 列表中的字段,因此我可以说:

Sam、Dan 和 Mike 都对您的帖子发表了评论

然后,我通过 ts 进行查询,存储用户在其行中查看的最后一个 ts,从而允许我每次对最新通知进行基于范围的查询。根据我的个人经验,这对于分片和查询非常有效。

希望对你有帮助

关于node.js - NodeJS通知系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11837381/

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