Mongodb 无组的Mongo平均聚合查询

Mongodb 无组的Mongo平均聚合查询,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我试图使用Mongo中的聚合框架获得整个字段的平均值。然而,我似乎找不到任何没有组参数的例子 我的文件结构如下: { “_id”:ObjectId(“5352703b61d2739b2ea44e4d”), “塞马纳”:“2014-02-23-2014-03-01”, “布尔萨德瓦洛雷斯”:“7”, “bvc”:“8”, “美元”:“76”, “生态汽油”:“51”, “美元价格”:“18” } 基本上,我想做的是以最快的方式(不使用MapReduce,因为它的效率低于聚合框架)获取整个集合的b

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

我的文件结构如下:

{
“_id”:ObjectId(“5352703b61d2739b2ea44e4d”),
“塞马纳”:“2014-02-23-2014-03-01”,
“布尔萨德瓦洛雷斯”:“7”,
“bvc”:“8”,
“美元”:“76”,
“生态汽油”:“51”,
“美元价格”:“18”
}
基本上,我想做的是以最快的方式(不使用MapReduce,因为它的效率低于聚合框架)获取整个集合的bvc字段和任何其他数字字段的平均值

我也尝试在大于零的基础上分组,但没有成功:

db.evaluatedMotions.aggregate([
{“$group”:{
“bvc”:{“$gt:0”}
}, 
{
“bvc”:{“$avg”:“$bvc”}
}
}
])
我感谢你能提供的任何帮助


参考资料:

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

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" } 
  } 
})

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

db.evaluatedMotions.aggregate([
{“$match”:{
“bvc”:{“$gt”:0}
}},
{“$组”:{
“_id”:空,
“bvc”:{“$avg”:“$bvc”}
}}
])

有关更多详细信息,请访问


你确实意识到,你给出的值实际上都不是数字,不是吗?事实上,它们都是字符串。这是真的,我没有意识到这一点,这是我在存储vales时遗漏的。谢谢,我希望在列表中显示0值,但在平均值中,我需要排除0。。在这种情况下,上述方法行不通。。有没有可能让它几乎错过了“_id”:null。这将把它全部组合在一起!天才!我必须在查询的周围加上括号[],才能使它正常工作
db.collection.aggregate([{“$group”:{“\u id”:null,“avg_bvc”:{“$avg”:“$bvc”}}}])
请您用更详细的解释来扩展您的答案,好吗?这对理解非常有用。非常感谢。
db.EvaluatedSentiments.aggregate([
{
    $group:{_id:null,avgbvc: {$avg:"$bvc"}}
}
]).forEach(printjson)