【问题标题】:Mongoose/MongoDB sum up fields of an array for subdocumentsMongoose/MongoDB 为子文档汇总数组的字段
【发布时间】:2018-06-06 15:25:45
【问题描述】:

我对 MongoDB/Mongoose 比较陌生,我不知道我应该如何获得我正在寻找的结果。基本上我有一个这样的文件:

{
    "playerId" : "",
    "sessions" : [ 
        {
            "start" : "",
            "end" : "",
            "join" : "",
            "leave" : "",
            "rounds" : [,
                {
                    "name" : "roundName",
                    "weapons" : [
                        {
                            "name" : "weaponName",
                            "kills" : 1,
                            "assits" : 1,
                            "deaths" : 1,
                            "shots" : 1,
                            "headshots" : 1
                        },
                        {
                            "name" : "weaponName",
                            "kills" : 1,
                            "assits" : 1,
                            "deaths" : 1,
                            "shots" : 1,
                            "headshots" : 1
                        }
                    ]
                },
                {
                    "name" : "roundName",
                    "weapons" : [
                        {
                            "name" : "weaponName",
                            "kills" : 1,
                            "assits" : 1,
                            "deaths" : 1,
                            "shots" : 1,
                            "headshots" : 1
                        },
                        {
                            "name" : "weaponName",
                            "kills" : 1,
                            "assits" : 1,
                            "deaths" : 1,
                            "shots" : 1,
                            "headshots" : 1
                        }
                    ]
                },
                {
                    "name" : "roundName",
                    "weapons" : [
                        {
                            "name" : "weaponName",
                            "kills" : 1,
                            "assits" : 1,
                            "deaths" : 1,
                            "shots" : 1,
                            "headshots" : 1
                        },
                        {
                            "name" : "weaponName",
                            "kills" : 1,
                            "assits" : 1,
                            "deaths" : 1,
                            "shots" : 1,
                            "headshots" : 1
                        }
                    ]
                }
            ]
        }
    ]
}

我想要的是一个查询,它为每一轮(击杀、死亡、助攻、爆头、射击)添加字段,其中包含所有武器的总和。如果可能,整个会话也应该发生同样的情况。任何帮助将不胜感激!

【问题讨论】:

  • 您能否请edit 您的问题包括您的集合中的示例文档而不是描述架构。最好从示例文档中显示您的预期输出。
  • 我用我所需要的和示例文档重写了这个问题。希望这会有所帮助!

标签: node.js mongodb express mongoose


【解决方案1】:

以下内容应为您提供按会话->轮次分组的统计信息列表: 这里的假设是 1) 集合的名称是射击游戏 2) 字段的名称是 $sessions.Rounds.Weapons

db.shootingGame.aggregate(
   [
       {$group: {
       _id: "$sessions.Rounds", 
       "sumkills": {$sum: "$sessions.Rounds.Weapons.kills" },
       "sumasists": {$sum: "$sessions.Rounds.Weapons.assists" },
       "sumdeaths": {$sum: "$sessions.Rounds.Weapons.deaths" },
       "sumheadshots": {$sum: "$sessions.Rounds.Weapons.headshots" },
       "sumshots": {$sum: "$sessions.Rounds.Weapons.shots" }
   }}
   ]
)

但是对于每个会话的进一步分组,您必须将此结果存储到另一个文档中并在每轮运行另一个 $sum 组

【讨论】:

  • 我尝试了您的方法,所有字段的值为 0。但这可能是因为我对我的文档的外观解释不佳。因此,我在我的问题中添加了一个示例文档。
  • 相同,得到值 0
猜你喜欢
  • 2013-07-13
  • 2018-01-26
  • 2014-09-30
  • 2020-11-21
  • 2019-02-01
  • 2022-11-24
  • 2021-11-27
  • 2014-11-15
相关资源
最近更新 更多