Mongodb平均聚合查询没有组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb平均聚合查询没有组相关的知识,希望对你有一定的参考价值。
我试图使用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"}
}
}
])
我感谢您提供的任何帮助。
答案
首先将数值存储为数字。之后,您可以使用简单的语句来计算平均值:
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" }
}
})
另一答案
因此,如果您的数据实际上是数字而不是,并且您的目的是排除具有“大于零”值的文档,那么您在聚合管道中包含$match
语句以“过滤”这些文档:
db.EvaluatedSentiments.aggregate([
{ "$match": {
"bvc": { "$gt": 0 }
}},
{ "$group": {
"_id": null,
"bvc": { "$avg": "$bvc" }
}}
])
另一答案
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)
以上是关于Mongodb平均聚合查询没有组的主要内容,如果未能解决你的问题,请参考以下文章