我正在使用MongoDB,Mongoose和Node存储游戏的用户信息。
我有一种情况,我希望有两套游戏记录: 1.用户 2.领导委员会
用户信息包括用户名,密码,游戏次数和用户的前5个分数。我目前有一个为此设置的架构,它完美无缺。
我现在被要求添加一个LeaderBoard,它应该显示所有用户的前十大总分。我想在同一个数据库中为此设置一个单独的记录,以避免检查所有用户记录并过滤以显示排行榜。我更倾向于将排行榜集合限制为10条记录,每次用户完成游戏时,检查他们对该集合的分数,看看他们是否应该在排行榜上。我是mongo / mongoose的新手,不知道如何最好地接近这个。
任何建议都将受到赞赏。
我确信这是其他人过去遇到过的问题,如果已经在这里讨论过,我道歉,但我已经搜索过并且找不到类似的内容。
答案 0 :(得分:2)
您不需要其他集合来执行此操作。您可以使用MongoDB中的查询完美地完成此任务。
假设我插入了以下内容:
db.user.insert({ name: 'foo', scores: [100, 80, 90, 60, 65] });
db.user.insert({ name: 'bar', scores: [95, 120, 83, 70, 42] });
db.user.insert({ name: 'baz', scores: [180, 160, 95, 100, 77] });
现在,为了获得这个系列的前10名游戏,您可以执行以下操作:
db.user.aggregate([
{ $project: { name: 1, scores: 1 } },
{ $unwind: "$scores" },
{ $sort: { scores: -1, name: 1 } },
{ $limit: 10 }
])
请记住,aggregate
是Mongo 2.2+的功能。一定要有。
有关它的更多信息,请查看official documentation。