I want to group a collection and then compute the average on one field of the groups.
I setup my db and contents like this:
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"})
Now I want the number of all services "A" and "B" and the average tet for all services "A" and "B". I tried this:
db.bla.aggregate( { "$group": { _id: "$service", requests: { $sum:1}, averagetet: { $avg: "$tet"}}})
But that always gives me "0" for the average values. What am I missing here?
You are using string values on tet field
db.bla.insert({"service": "B", "tet": "25"}) //this quotes creates a String value.
You have to insert using numbers, as follows:
db.bla.insert({"service": "B", "tet": 25})
Inserting the correct values, MongoDB gives the correct average of tet field.
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
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With