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