【发布时间】:2014-12-29 02:05:27
【问题描述】:
在我的流星项目中,我有一个排行榜,它在图表上显示每个级别的玩家,分布在游戏中的每个级别。为简单起见,假设有 1-100 级。目前,为了避免流星过载,我只是告诉服务器将每条新的记录发送给我两周前,但这对于准确的排行榜来说是不够的。
我要做的是显示代表每个级别的 50 条记录。因此,如果第 1 级有 100 条记录,第 2 级有 85 条记录,第 3 级有 65 条记录,第 4 级有 45 条记录,我想显示每个级别的 最新 50 条记录,所以我将分别有 [50, 50, 50, 45] 条记录。
数据看起来像这样:
{
snapshotDate: new Date(),
level: 1,
hp: 5000,
str: 100
}
我认为这需要一些 mongodb 聚合,但我无法完全弄清楚如何在一个查询中执行此操作。但是,将其分成两部分是微不足道的 - 选择所有记录,按级别分组,按日期对每个级别进行排序,然后从每个级别中获取最后 50 条记录。但是,如果可以的话,我宁愿在一次手术中完成。目前可以做这样的事情吗?
【问题讨论】:
-
您能在收藏中发布一个示例文档吗?清楚地描述文档结构后,提供解决方案会变得容易得多。
-
@BatScream 我已在问题中添加了文档的小版本。
-
Collection.find({level:1},{limit:50});
-
@Sindis 我想找到每个级别的最新 50 条,而不是一个级别,而不仅仅是 50 条任意记录。
-
你将不得不循环它然后通过每个级别(使用 if 子句检查是否有任何记录)并根据需要限制它(限制记录,如果你有 45 它将打印你 45 , 而不是 50)
标签: mongodb meteor mongodb-query