首页 文章

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

提问于
浏览
1

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

我有一种情况,我希望有两套游戏记录:1 . 用户2.领导委员会

用户信息包括用户名,密码,游戏次数和用户的前5个分数 . 我目前有一个为此设置的架构,它完美无缺 .

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

任何意见,将不胜感激 .

我确信这是其他人在过去遇到的问题,如果已经在这里讨论过,我道歉,但我已经搜索过并且无法找到类似的东西 .

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的函数 . 一定要有 . 有关它的更多信息,请查看official documentation .

相关问题