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+的函数。 确保你有它。 有关更多信息,请查看官方文档 。