MongoDB中的多个模式(使用Mongoose)

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

我有一个情况,我希望有两套logging的游戏:1.用户2.排行榜

用户信息包括用户名,密码,游戏次数和用户前5分等。 我目前有一个架构为此,它的工作完美无瑕。

我现在被要求添加一个LeaderBoard,它应该显示所有用户的前10个总分。 我想在同一个数据库中为此设置一个单独的logging,以避免检查所有的用户logging和筛选以显示排行榜。 我宁愿将排行榜collections限制在10条logging中,每次用户完成一个游戏时,都要查看他们的分数,看他们是否应该在排行榜上。 我是新来的芒果/mongoose,不知道如何最好的方法。

任何意见,将不胜感激。

我相信这是别人过去碰到的一个问题,如果在这里被覆盖了,我表示歉意,但是我已经search了,找不到类似的东西。

你不需要另一个收集来做到这一点。 你可以在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+的函数。 确保你有它。 有关更多信息,请查看官方文档 。