Mongodb 在通知系统中使用Mongo Map Reduce

Mongodb 在通知系统中使用Mongo Map Reduce,mongodb,mapreduce,Mongodb,Mapreduce,我正在mongodb中实现一个通知系统。基本上,我创建通知项并向用户订阅它们。之后,若在通知项上发生任何操作,我只需将它们记录在操作文档中,以便查询用户在操作集合上的通知。 到目前为止一切都很好 现在我只想按动作的类型和通知项对动作进行分组,并按最新动作时间(比如follow、comment等)对结果进行排序。所以我可以做一个总结,比如“约翰、丽莎和其他三个像你一样的家伙” 为了成功,我在mongodb上实现了mapreduce。它也在工作。但问题是它看起来不对劲 因为mapreduce会生成一

我正在mongodb中实现一个通知系统。基本上,我创建通知项并向用户订阅它们。之后,若在通知项上发生任何操作,我只需将它们记录在操作文档中,以便查询用户在操作集合上的通知。 到目前为止一切都很好

现在我只想按动作的类型和通知项对动作进行分组,并按最新动作时间(比如follow、comment等)对结果进行排序。所以我可以做一个总结,比如“约翰、丽莎和其他三个像你一样的家伙”

为了成功,我在mongodb上实现了mapreduce。它也在工作。但问题是它看起来不对劲

因为mapreduce会生成一个集合作为输出。 在这种情况下

User1登录,mapreduce运行生成通知集合,然后 User2登录,mapreduce运行生成同名通知集合(已为其他用户创建)

我很好奇如果多个用户同时触发mapreduce会发生什么?(很有可能,这是一个社交网络)

我想也许我可以为每个用户创建唯一的通知集合
notification\u$userid
。。对于100万用户来说,100万的收藏听起来不合适吗

顺便说一下,我从MongoDB分组开始,但改为mapreduce,因为我想对结果集进行排序


多谢各位

我不以你为榜样。您是为每个用户创建新集合还是重复使用?如果重复使用,它只会覆盖其他集合。默认情况下,集合不能超过25000个。如果每个用户都有一个集合,并且使用增量MapReduce,您可能会遇到MapReduce数据集合对于给定用户来说不是最新的情况。MRS不适合运行到您的应用程序中,我个人认为这是您的逻辑中的一个根本缺陷,即将MR内联运行到等待页面加载的用户。相反,您应该尝试设计一个模式来实现这一点,这就是我所做的…@wiredparie我不是为每个用户创建集合,在我的情况下,mapreduce的结果对于每个用户都应该是唯一的。这就是问题所在,我想不出来。@Sammaye我明白你的意思。这是有道理的,这就是为什么我对我目前的设计不满意的原因。我的初始模式可以提供基本功能,我可以使用find进行基本查询。那么,对于将类似的操作分组到类似的项目上,您可以建议什么解决方案呢?这取决于您如何编写通知。如果您为每个用户编写通知,则可以非常简单地预先分组,即您可以查询此用户向该用户发送已执行通知的位置。如果已将此用户添加到该事件文档中的
用户ID
列表中,然后在显示时计算
用户ID
字段的长度,并从中呈现3个用户。