我想对一个集合进行分组,然后计算这些组的一个字段的平均值。
我设置了我的数据库和内容,如下所示:
use testdb
db.bla.insert({"service": "A", "tet": "1"})
db.bla.insert({"service": "A", "tet": "100"})
db.bla.insert({"service": "A", "tet": "150"})
db.bla.insert({"service": "B", "tet": "10"})
db.bla.insert({"service": "B", "tet": "20"})
db.bla.insert({"service": "B", "tet": "25"})
现在我想要所有服务“A”和“B”的数量以及所有服务“A”和“B”的平均tet。 我试过这个:
db.bla.aggregate( { "$group": { _id: "$service", requests: { $sum:1}, averagetet: { $avg: "$tet"}}})
但是这总是给我“0”的平均值。 我在这里缺少什么?
答案 0 :(得分:9)
您在tet
字段
db.bla.insert({"service": "B", "tet": "25"}) //this quotes creates a String value.
您必须使用数字插入,如下所示:
db.bla.insert({"service": "B", "tet": 25})
插入正确的值,MongoDB会给出tet
字段的正确平均值。
db.bla.insert({"service": "A", "tet": 1})
db.bla.insert({"service": "A", "tet": 100})
db.bla.insert({"service": "A", "tet": 150})
db.bla.insert({"service": "B", "tet": 10})
db.bla.insert({"service": "B", "tet": 20})
db.bla.insert({"service": "B", "tet": 25})
db.bla.aggregate( { "$group": { _id: "$service", requests: { $sum:1}, averagetet: { $avg: "$tet"}}})
{
"result": [
{
"_id": "B",
"requests": 3,
"averagetet": 18.333333333333332
},
{
"_id": "A",
"requests": 3,
"averagetet": 83.66666666666667
}
],
"ok": 1
}