【发布时间】:2017-01-24 15:54:28
【问题描述】:
我需要找到所有用户的分数,只为每个用户挑选两个最好的分数,最后将这些分数相加来创建一个排行榜。
让我举个例子说明我正在寻找什么以及我已经尝试过但没有成功。
Users Collection:
[
{user: "userA", score:10, game: 12},
{user: "userA", score:20, game: 12},
{user: "userA", score:7, game: 12},
{user: "userB", score:10, game: 12},
{user: "userB", score:3, game: 12},
{user: "userB", score:7, game: 12}
]
我想要的结果是这样的:
[
{user:"userA", score:30, game:12},
{user:"userB", score:17, game:12}
]
我尝试过聚合的 mongo 方式,但不幸的是你不能 $sort, $limit 在聚合的 $group 阶段,这意味着你不能只选择两个最好的分数。
有没有办法通过处理简单的 find() 查询的返回文档,使用 mapReduce 甚至使用 Lodash 来做到这一点?
【问题讨论】: