2013-03-20 48 views
0

我有一组文档(名为posts),每个文档都包含一个名为category的字段。 每个类别都是类别集合的一部分。有一个固定的数字(比如15)。如何在一个MongoDB查询中从10个类别中获取最新的10篇文章?

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

+0

您如何定义“最后10位” - 您是否在文档上保留一个日期,我假设,然后您想要10个“最近期”? – 2013-03-20 16:58:05

+0

是的,我有一个createdAt字段,记录时间戳,最后我的意思是最新的,抱歉不清楚我编辑的问题。 – stanm87 2013-03-22 13:12:28

+0

在单个查询中没有办法做到这一点 - 您可能需要mapreduce - 这需要如何“高性能”?以及“真正的时间”? – 2013-03-22 19:00:19

回答

1

另一个解决方案是设置在实际上是结果的一部分,就像每个职位的“标志”:

topTen: true 

定义上标志稀疏索引会给最快的查询 - 在价格当然,维护该标志的:

  • 设置该标志在插入时间(冲击:多一个索引来更新)
  • 如果它是可以容忍的,对于一定的时间段的查询返回11个帖子代替10,然后触发一个backgro und过程,删除(取消)该类别的第11个标志
  • 如果不可容忍,则在插入时找到并取消设置第11个标志
  • 如果现有帖子的类别被更改,请确保标志被设置好的(旧的和新的类别)
  • 如果一个帖子被删除,并且设置了标志:找到并设置新的第10个帖子的标志
  • 可能是你想要提供一个定期运行的进程,确保标志全部设置为应该是

有关稀疏i指数,请参阅http://docs.mongodb.org/manual/core/indexes/#index-type-sparse

+0

感谢您的洞察力的答案 – stanm87 2013-04-21 14:13:16

1

也许最好是先获取所有类别的列表,然后为每个类别分别查询10个最新帖子。

相关问题