MongoDB:具有不同
我检查了各种Stackoverflow线程,没有找到答案 我有一个包含各种分数条目的集合,每个条目都包含用户玩游戏当天的一些数据 以下是4个文档的简化示例:MongoDB:具有不同,mongodb,Mongodb,我检查了各种Stackoverflow线程,没有找到答案 我有一个包含各种分数条目的集合,每个条目都包含用户玩游戏当天的一些数据 以下是4个文档的简化示例: { user_id: 1, someint: 10, agerange: "25-35", score: 12345 }, { user_id: 2, someint: 10, agerange:
{
user_id: 1,
someint: 10,
agerange: "25-35",
score: 12345
},
{
user_id: 2,
someint: 10,
agerange: "35-45",
someotherkey: 12345
},
{
user_id: 1,
someint: 8,
agerange: "25-35",
score: 12345
},
{
user_id: 3,
someint: 10,
agerange: "13-18",
someotherkey: 12345
}
在本例中,用户#1播放了两次
我想获得玩家年龄范围的统计数据,而不需要计算同一用户两次
下面是一个我所期待的例子:
{
_id: "25-35", // <- User #1 counted only once
total: 1
},
{
_id: "35-45",
total: 1
},
{
_id: "13-18",
total: 1
}
当我按UID分组时,我在输出中得到每个用户的UI,这不是我所期望的
似乎找不到双重分组的有效结构
有什么想法吗?双组解决方案:
db.players.aggregate([
{
$group: {
_id: {user_id: '$user_id', agerange: '$agerange'}
}
},
{
$group: {
_id: '$_id.agerange',
total : {
$sum: 1
}
}
}
])
第一组
第一个$group
用于对$user\u id
和$agerange
进行区分。如果仅使用$sum
执行第一个组:
数据:
小组结果:
我每对夫妇有一个对象$user\u id
/$agerange
$sum
在我们的案例中是无用的,所以我删除了它
第二组
第二组应用于第一组结果。我需要计算返回$agerange
值的次数,因此我在第一组结果的$\u id.agerange
上创建一个组
我希望你清楚我的英语很差:)工作得很好!这也有助于我理解这种查询的结构。谢谢谢谢我理解它的工作方式,但你的补充解释可能会帮助那些也在寻找答案的人。查询已经在我们的stats界面上生成。
db.players.aggregate([
{
$group: {
_id: {user_id: '$user_id', agerange: '$agerange'}
}
},
{
$group: {
_id: '$_id.agerange',
total : {
$sum: 1
}
}
}
])
db.players.find()
{ "_id" : ObjectId("529e566bfdfd61191c830099"), "user_id" : 1, "someint" : 10, "agerange" : "25-35", "score" : 12345 }
{ "_id" : ObjectId("529e5680fdfd61191c83009a"), "user_id" : 2, "someint" : 10, "agerange" : "35-45", "someotherkey" : 12345 }
{ "_id" : ObjectId("529e568ffdfd61191c83009b"), "user_id" : 1, "someint" : 8, "agerange" : "25-35", "score" : 12345 }
{ "_id" : ObjectId("529e569dfdfd61191c83009c"), "user_id" : 3, "someint" : 10, "agerange" : "13-18", "someotherkey" : 12345 }
{ "_id" : ObjectId("529e5c4cf829b266f4c3e813"), "user_id" : 2, "someint" : 8, "agerange" : "25-35", "score" : 12345 }
db.players.aggregate([ { $group: { _id: {user_id: '$user_id', agerange: '$agerange'}, total : { $sum: 1 } } }]);
{
"result" : [
{
"_id" : {
"user_id" : 2,
"agerange" : "25-35"
},
"total" : 1
},
{
"_id" : {
"user_id" : 3,
"agerange" : "13-18"
},
"total" : 1
},
{
"_id" : {
"user_id" : 2,
"agerange" : "35-45"
},
"total" : 1
},
{
"_id" : {
"user_id" : 1,
"agerange" : "25-35"
},
"total" : 2
}
],
"ok" : 1
}