1

我正在使用 MongoDB、Mongoose 和 Node 来存储游戏的用户信息。

我有一种情况,我希望获得两套游戏记录:1. 用户 2. 排行榜

用户信息包括用户名、密码、游戏次数和用户的前 5 名得分。我目前为此设置了一个架构,它可以完美运行。

我现在被要求添加一个排行榜,它应该显示所有用户的前 10 名总分。我想在同一个数据库中为此设置单独的记录,以避免检查所有用户记录并过滤以显示排行榜。我更愿意将排行榜集合限制为 10 条记录,并且每次用户完成游戏时,对照该集合检查他们的分数,看看他们是否应该在排行榜上。我是 mongo/mongoose 的新手,不知道如何最好地解决这个问题。

任何意见,将不胜感激。

我确信这是其他人过去遇到过的问题,如果这里已经涵盖,我很抱歉,但我已经搜索过并且无法找到类似的东西。

4

1 回答 1

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+ 中的一个功能。确保你拥有它。有关它的更多信息,请查看官方文档

于 2013-04-15T18:38:40.050 回答