Mongodb平均聚合查询没有组

问题描述 投票:9回答:3

我试图使用Mongo中的聚合框架获得整个字段的平均值。但是,我似乎无法找到任何使用它而没有组参数的示例。

我有以下文档结构:

 {
      "_id" : ObjectId("5352703b61d2739b2ea44e4d"),
      "Semana" : "2014-02-23 - 2014-03-01",
      "bolsaDeValores" : "7",
      "bvc" : "8",
      "dollar" : "76",
      "ecopetrol" : "51",
      "dollarPrice" : "18"
 }

基本上我想要做的是以最快的方式获得整个集合的bvc字段和任何其他数字字段的平均值(不使用MapReduce,因为它比聚合框架效率低)。

我试图在大于零的基础上进行分组,但无济于事:

db.EvaluatedSentiments.aggregate([
    { "$group": { 
        "bvc" : {"$gt:0"}
        }, 
        {
            "bvc" : { "$avg" : "$bvc"}
        }
    }
])

我感谢您提供的任何帮助。

参考文献:Mongo aggregation manual

mongodb aggregation-framework
3个回答
36
投票

首先将数值存储为数字。之后,您可以使用简单的语句来计算平均值:

db.collection.aggregate({ 
  "$group": {
    "_id": null, 
    "avg_bvc": { "$avg": "$bvc" } 
  } 
})

您可以使用更多$avg聚合运算符来获取其他数字字段的平均值:

db.collection.aggregate({ 
  "$group": {
    "_id": null, 
    "avg_bvc": { "$avg": "$bvc" }, 
    "avg_dollar": { "$avg": "$dollar" } 
  } 
})

2
投票

因此,如果您的数据实际上是数字而不是,并且您的目的是排除具有“大于零”值的文档,那么您在聚合管道中包含$match语句以“过滤”这些文档:

db.EvaluatedSentiments.aggregate([
    { "$match": {
        "bvc": { "$gt": 0 }
    }},
    { "$group": {
        "_id": null,
        "bvc": { "$avg": "$bvc" }
    }}
])

-1
投票
For more details please visit the following link: https://docs.mongodb.com/manual/reference/operator/aggregation/group/index.html

db.EvaluatedSentiments.aggregate([
{
$group:{_id:null,avgbvc: {$avg:"$bvc"}}
}
]).forEach(printjson)
© www.soinside.com 2019 - 2024. All rights reserved.