【问题标题】:Simple $avg in MongoDBMongoDB 中的简单 $avg
【发布时间】:2018-03-22 22:19:11
【问题描述】:

我正在尝试使用 MongoDb 中的聚合管道计算字段的平均值。

我在testcolleciton 中的测试数据是:

[{ _id: aaaaa, aa: 3, bb: 4},
 { _id: bbbbb, aa: 5, bb: 6},
 { _id: ccccc, aa: 7, bb: 8}]

按照 MongoDB 网站上的说明进行操作:https://docs.mongodb.com/manual/reference/operator/aggregation/avg/

我将查询设计为:

 db.getCollection('test').aggregate([ {$project:  { AVGaabb: { $avg: ['$aa','$bb'] } } }])

但是,如果我在 Robomongo 中运行此查询,我会得到:

assert: command failed: {
    "errmsg" : "exception: invalid operator '$avg'",
    "code" : 15999,
    "ok" : 0
} : aggregate failed

我对 $avg 查询的理解有误吗?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    3.2 版本中,$avg 在 $group 和 $project 阶段可用。在以前的 MongoDB 版本中,$avg 仅在 $group 阶段可用。

    因此,如果您使用以前的版本,则必须创建 $group 阶段而不是 $project 阶段。

    我已经在我的一个 mongos (3.2.7) 中进行了测试:

    > db.stackoverflow.aggregate([{$project:{ "AVGaabb": { $avg: ["$aa","$bb"] }}}])
    { "_id" : ObjectId("578fa20574b924681b055c95"), "AVGaabb" : 3.5 }
    { "_id" : ObjectId("578fa20b74b924681b055c96"), "AVGaabb" : 5.5 }
    { "_id" : ObjectId("578fa21074b924681b055c97"), "AVGaabb" : 7.5 }
    

    【讨论】:

    • 我在 compose 上托管数据库,版本是 3.2.7.. 但是我从 Robomongo 客户端连接调用聚合。会不会是因为 Robomongo?
    • 尝试通过命令提示符或终端使用 mongoclient 运行它
    • 啊啊。谢谢。你在哪里对。我在 V3.0 的模数上运行这个数据库,当我在 V3.2 的 compose 数据库上测试它时,它工作了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多