跟踪查看的内容

时间:2015-01-25 16:35:16

标签: mongodb mongodb-query

假设我有类似RSS阅读器的东西,我有大量可用的项目,而我只想显示用户未阅读的项目。

什么是跟踪哪些内容不会导致超级脏查询的最佳方法?我试图避免巨大的$nin: [12312, 1341, 134234, ..]情况。在说了一年的使用之后,你有数百万的物品,然后至少有数千种物品在你的阅读中被阅读"阵列。

我能想到的另一个选择是为每个用户保留一个集合,当有新项目进入时,将其添加到拥有该Feed集合的每个用户。随着时间的推移,这看起来更干净了,但是如果我有大量的营业额并说30%的用户停止使用该网站会怎样。他们的藏品只会收集大量数据?我可以在一段时间后修剪这些系列,但我也不确定它是否公平。如果他们去度假怎么办?

这两种解决方案对我来说都是非常严重的,我错过了更好的方法吗?

注意:我的问题已被标记,结果将写入Mongo,但答案不需要特定于此。

2 个答案:

答案 0 :(得分:1)

一种可能性是存储已读取项目文档中的项目的用户的用户ID。然后,您可以搜索read数组中不包含用户ID的文章。

显然,如果你有很多用户,你就会遇到文档增长问题。

答案 1 :(得分:0)

对于按时间顺序排列的数据而言,最有效的方法是保存每个用户看到的最旧内容的日志,以及任何不适合的“标记为未读”项目的单独列表。

我认为这实际上是一个很好的理由,要么按时间顺序对此进行排序,要么至少将其合并到您的算法中,这样您就可以计算相关内容的最大年龄,以保证您的查询可行。

如果它是真正的非按时间顺序排列的数据,那么您必须为每个用户保留一组项目。