3

コレクションをグループ化し、グループの 1 つのフィールドで平均を計算したいと考えています。

私は自分のデータベースとコンテンツを次のようにセットアップしました:

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」の平均テットが必要です。私はこれを試しました:

db.bla.aggregate( { "$group": { _id: "$service", requests: { $sum:1}, averagetet: { $avg: "$tet"}}})

しかし、平均値は常に「0」になります。ここで何が欠けていますか?

4

1 に答える 1

11

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
}
于 2013-02-22T11:16:52.553 に答える