Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
json结构中的Mongodb按元素分组_Json_Mongodb_Scala - Fatal编程技术网

json结构中的Mongodb按元素分组

json结构中的Mongodb按元素分组,json,mongodb,scala,Json,Mongodb,Scala,我正在寻找一个适合我需要的数据库,我正在使用mongodb进行测试,但我不知道我是否能够按照自己的意愿完成这项工作 在我的mongodb集合中有这样一个json文档: { "gameId": 1, "gameDuration": 1234, "teams": [{ "teamId": 1, "win": true }, { "teamId": 2, "win": false }], "

我正在寻找一个适合我需要的数据库,我正在使用mongodb进行测试,但我不知道我是否能够按照自己的意愿完成这项工作

在我的mongodb集合中有这样一个json文档:

{
    "gameId": 1,
    "gameDuration": 1234,
    "teams": [{
        "teamId": 1,
        "win": true
    }, {
        "teamId": 2,
        "win": false
    }],
    "players": [{
        "playerId": 1,
        "teamId": 1,
        "age": 32
    }, {
        "playerId": 2,
        "teamId": 2,
        "age": 52
    }]
}
所以我收集了一些类似这样的游戏。 我希望能够查询最常见的球员年龄,或得到年龄排序。我不在乎一名球员是否参加了两场不同的比赛,我只想知道所有比赛中最常见的年龄,不受球员和球队的影响

如果我有4个游戏:

[{
        "gameId": 1,
        "gameDuration": 1234,
        "teams": [{
            "teamId": 1,
            "win": true
        }, {
            "teamId": 2,
            "win": false
        }],
        "players": [{
            "playerId": 1,
            "teamId": 1,
            "years": 32
        }, {
            "playerId": 2,
            "teamId": 2,
            "years": 52
        }]
    },
    {
        "gameId": 2,
        "gameDuration": 1234,
        "teams": [{
            "teamId": 1,
            "win": true
        }, {
            "teamId": 2,
            "win": false
        }],
        "players": [{
            "playerId": 1,
            "teamId": 1,
            "years": 25
        }, {
            "playerId": 2,
            "teamId": 2,
            "years": 23
        }]
    },
    {
        "gameId": 3,
        "gameDuration": 1234,
        "teams": [{
            "teamId": 1,
            "win": true
        }, {
            "teamId": 2,
            "win": false
        }],
        "players": [{
            "playerId": 1,
            "teamId": 1,
            "years": 32
        }, {
            "playerId": 2,
            "teamId": 2,
            "years": 23
        }]
    },
    {
        "gameId": 4,
        "gameDuration": 1234,
        "teams": [{
            "teamId": 1,
            "win": true
        }, {
            "teamId": 2,
            "win": false
        }],
        "players": [{
            "playerId": 1,
            "teamId": 1,
            "years": 32
        }, {
            "playerId": 2,
            "teamId": 2,
            "years": 27
        }]
    }
]
分类年龄的结果应该是:
[32,23,52,25,27]
或者最常见的年龄应该是
32
或者最好能统计每个年龄段的人数。
[{32:3},{23:2},{25:1},{27:1}]

我有搜索功能,但找不到执行此查询的方法。 我不得不说,这个数据库将有很多游戏,数以百万计,所以我想知道一个查询如何做这将影响性能。我不想要200毫秒的查询,但我也不想要1小时的查询

我正在使用来执行查询,但它可以是任何语言,然后我可以尝试解析以满足我的需要


我希望其他数据库能够做到这一点,但由于mongodb允许我直接插入json,这是我的第一个选择。但是如果它不适合我的需要,我也会寻找,如果不适合,我会找一个关系数据库,将json解析到定义的表中。

您能检查以下聚合是否满足您的需要:

db.games.aggregate([{$unwind:"$players"}, {$group:{_id:"$players.years", count:{$sum:1}}}, {$sort:{count:-1}}])
或:

db.games.aggregate([{$unwind:"$players"}, {$group:{_id:"$players.years", count:{$sum:1}}}, {$sort:{count:-1}}, {$limit:1}])