繁体   English   中英

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

[英]MongoDB Aggregation with sum of identical array elements how to?

我正在建立最常用的纸牌组合的统计数据,这可以通过放宽$ players并与$ players.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
                }
            ]
        }
    ]
}

在此先感谢您的帮助!

干得好 :

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM