如何在一个MongoDB查询中从10个类别中获取最新的10篇文章?

如何在一个MongoDB查询中从10个类别中获取最新的10篇文章?,mongodb,Mongodb,我有一组文档(命名帖子),每个文档都包含一个名为category的字段。 每个类别都是类别集合的一部分。它们的数量是固定的(比如说15个) 如何从每个类别中获取最后10个TLDR?可能最好首先获取所有类别的列表,然后通过单独的查询获取每个类别的10个最新帖子。另一个解决方案是在每个帖子中设置一个“标志”,这实际上是结果的一部分,如: topTen: true 在该标志上定义稀疏索引将提供最快的查询—当然,以维护该标志为代价: 在插入时设置标志(影响:再更新一个索引) 如果在一段时间内,查询返

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


如何从每个类别中获取最后10个TLDR?

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

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

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

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

有关稀疏索引的更多信息,请参见

如何定义“last 10”-我假设您在文档上保留了一个日期,然后您想要10个“最近的”?是的,我有一个createdAt字段记录时间戳,last是指最新的,抱歉,我不清楚我编辑了这个问题。没有一种方法可以在一个查询中完成此操作-您可能需要mapreduce来完成此操作-此操作需要多大的“性能”?如何“实时”?这需要尽可能的实时。(这是一个发现页面)。现在我用11个查询来完成。首先我获取类别,然后为每个类别获取最新帖子。它足够快,但我很确定它不是最佳的