具有相同数组元素总和的MongoDB聚合如何?

时间:2016-12-05 21:16:50

标签: mongodb aggregation-framework

我正在建立大多数使用过的卡片组合的统计数据,我可以通过展开$玩家和使用$ player.spells.d的_id进行分组来轻松完成 - 它的工作速度非常快,并且完全符合我的要求。

我遇到的问题是我无法弄清楚如何考虑卡的等级。 (卡片可以升级) - 当缺少水平时,它意味着它是1级。所以我最想得到的是甲板ID(所有卡片的组合,它们已经分类,所以不需要做任何已经使用$ players.spells.d分组生成的魔术技巧,以及该组合的每张卡的平均等级。

这是我的疑问:

db.matches.aggregate([
    {$unwind: "$players"},
    {$group: {
            '_id': '$players.spells.card',
            'count': {'$sum' : 1}
        }
    },
    {$sort: {'count' : -1}}
]);

这是匹配文档的样子,每场比赛有2名球员:

{
    "_id" : 123,
    "players" : [
        {
            "id" : 41,
            "spells" : [
                {
                    "card" : 11,
                    "level" : 2
                },
                {
                    "card" : 12
                },
                {
                    "card" : 13,
                    "level" : 2
                },
                {
                    "card" : 14
                },
                {
                    "card" : 15,
                    "level" : 2
                },
                {
                    "card" : 16,
                    "level" : 2
                },
                {
                    "card" : 17,
                    "level" : 2
                },
                {
                    "card" : 18
                }
            ]
        },
        {
            "id" : 31,
            "spells" : [
                {
                    "card" : 7
                },
                {
                    "card" : 88
                },
                {
                    "card" : 9
                },
                {
                    "card" : 10
                },
                {
                    "card" : 11
                },
                {
                    "card" : 12
                },
                {
                    "card" : 13
                },
                {
                    "card" : 14
                }
            ]
        }
    ]
}

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你去:

db.matches.aggregate([
    {$unwind: "$players"},
    {$unwind:"$players.spells"},
    {$group:{"_id":"$players.id","count":{"$sum":"$players.spells.card"}}
}])