【问题标题】:How to fetch the newest 10 posts from 10 categories in one MongoDB query?如何在一个 MongoDB 查询中从 10 个类别中获取最新的 10 个帖子?
【发布时间】:2013-03-09 17:05:37
【问题描述】:

我有一组文档(命名帖子),每个文档都包含一个名为 category 的字段。 每个类别都是类别集合的一部分。它们的数量是固定的(比如 15 个)。

如何获取每个类别的最后 10 个 tldr?

【问题讨论】:

  • 您如何定义“最后 10 个” - 我假设您是否在文档上保留日期,然后您想要 10 个“最近的”?
  • 是的,我有一个记录时间戳的 createdAt 字段,最后我的意思是最新的,抱歉不清楚我编辑了这个问题。
  • 没有办法在单个查询中做到这一点——您可能需要 mapreduce 来解决这个问题——这需要有多“性能”?以及如何“实时”?
  • 这需要尽可能实时。 (这是一个发现页面)。现在我用 11 个查询来做这件事。首先我获取类别,然后为每个类别获取最新的帖子。它足够快,但我很确定它不是最佳的

标签: mongodb


【解决方案1】:

另一种解决方案是在每个帖子中设置一个“标志”,这实际上是结果的一部分,例如:

topTen: true

在该标志上定义稀疏索引将提供最快的查询 - 当然,以维护该标志为代价:

  • 在插入时设置标志(影响:再更新一个索引)
  • 如果在一段时间内查询返回 11 个帖子而不是 10 个帖子是可以容忍的,则触发一个后台进程删除(取消设置)该类别的第 11 个标志
  • 如果不能容忍,在插入时查找并取消设置第 11 个标志
  • 如果现有帖子的类别发生更改,请确保标记设置正确(针对旧类别和新类别)
  • 如果设置了标志的帖子被删除:查找并设置新的第 10 条帖子的标志
  • 您可能希望提供一个定期运行的进程,以确保所有标志都按应有的方式设置

有关稀疏索引的更多信息,请参阅http://docs.mongodb.org/manual/core/indexes/#index-type-sparse

【讨论】:

    【解决方案2】:

    首先获取所有类别的列表可能会更好,然后通过单独的查询为每个类别获取 10 个最新帖子。

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多