gpt4 book ai didi

mongodb - Mongo 中的分箱和制表(唯一/计数)

转载 作者:行者123 更新时间:2023-12-02 03:41:17 26 4
gpt4 key购买 nike

我正在寻找一种使用 Mongo 生成一些汇总统计信息的方法。假设我有一个包含许多表单记录的集合

{"name" : "Jeroen", "gender" : "m", "age" :27.53 }

现在我想获得性别和年龄的分布。假设性别只有值 "m""f"。获取我的集合中男性和女性总数的最有效方法是什么?

对于年龄,有没有一种方法可以进行一些“分箱”并给我一个类似总结的直方图;即年龄在以下区间内的记录数:[0, 2), [2, 4), [4, 6) ... 等?

最佳答案

我刚刚尝试了 MongoDB 2.2 版本中将提供的新聚合框架(2.2.0-rc0 已发布),它应该比 MapReduce 具有更高的性能,因为它不依赖于 Javascript。

输入数据:

{ "_id" : 1, "age" : 22.34, "gender" : "f" }
{ "_id" : 2, "age" : 23.9, "gender" : "f" }
{ "_id" : 3, "age" : 27.4, "gender" : "f" }
{ "_id" : 4, "age" : 26.9, "gender" : "m" }
{ "_id" : 5, "age" : 26, "gender" : "m" }

性别聚合命令:

db.collection.aggregate(
{$project: {gender:1}},
{$group: {
_id: "$gender",
count: {$sum: 1}
}})

结果:

{"result" : 
[
{"_id" : "m", "count" : 2},
{"_id" : "f", "count" : 3}
],
"ok" : 1
}

要获取垃圾箱中的年龄:

db.collection.aggregate(
{$project: {
ageLowerBound: {$subtract:["$age", {$mod:["$age",2]}]}}
},
{$group: {
_id:"$ageLowerBound",
count:{$sum:1}
}
})

结果:

{"result" : 
[
{"_id" : 26, "count" : 3},
{"_id" : 22, "count" : 2}
],
"ok" : 1
}

关于mongodb - Mongo 中的分箱和制表(唯一/计数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com