mongodb - 使用 Mongo 聚合框架的组项目的平均值

标签 mongodb aggregation-framework

我想对一个集合进行分组,然后计算组中一个字段的平均值。

我这样设置我的数据库和内容:

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”。 我在这里缺少什么?

最佳答案

您正在 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
}

关于mongodb - 使用 Mongo 聚合框架的组项目的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15022683/

相关文章:

javascript - 简单的$ avg查询Node.js

mongodb - 在双重嵌套数组 MongoDB 中查找

java - 在带有 Morphia 的 Mongo 聚合管道中使用运算符的正确方法是什么

mongodb - 如何在mongodb中选择嵌套数组的字段和计数

javascript - node.js 中的 findOneAndUpdate mongoose 失败

javascript - Mongoose find 返回文档而不是数组中的特定对象

database - mongo db (mongodb.service) 失败,状态 14

mongodb - $lookup 当外部字段是数组时

node.js - Mongodb 光标在 ejs 模板中为空(ejs 内的异步调用)

macos - 如何识别 com.apple.launchd 试图运行的源