如何在MongoDB中聚合数组中的文档而不是集合中的文档?

如何在MongoDB中聚合数组中的文档而不是集合中的文档?,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我的MongoDB数据库中有以下集合cidade: { "_id" : 0, "nome" : "CIDADE0", "qtdhab" : 1231043 } 所以,这是我想做的。我尝试在MongoDB中执行与此SQL查询等效的操作: SELECT MAX(QTDHAB) FROM CIDADE WHERE QTDHAB <= (SELECT AVG(QTDHAB) FROM CIDADE); 问题是,正如我艰难地发现的那样,对于resultado2这样

我的MongoDB数据库中有以下集合cidade

{ 
    "_id" : 0, 
    "nome" : "CIDADE0", 
    "qtdhab" : 1231043 
}
所以,这是我想做的。我尝试在MongoDB中执行与此SQL查询等效的操作:

SELECT MAX(QTDHAB) FROM CIDADE WHERE QTDHAB <= (SELECT AVG(QTDHAB) FROM CIDADE);

问题是,正如我艰难地发现的那样,对于resultado2这样的数组,没有.aggregate方法,因此最后一个查询返回一个错误。有没有其他方法可以从这两个查询生成的文档数组中获取字段qtdhab最大值


我们看不到您的文档,但您基本上希望从每个数组中获取第一个结果,然后从中计算出一些值。但首先需要解构数组。请看,或者至少在这里发布一些人们可以使用的内容。对不起,我已经用文档结构更新了帖子。文档结构与数组有什么关系?我在那里看不到阵列。还是文档中的数组元素?我认为包含数组的实际文档是这里的重要部分。没有包含数组的文档。我提到的数组是由查询生成的数组,没有查询生成的数组,只有游标。旧版本的MongoDB返回聚合结果是数组,还有
.distinct()
.mapReduce()
方法。调用
.toArray()
将从光标返回一个数组。但除此之外,没有数组作为结果。请在你的问题中更清楚地说明你在做什么。非常感谢你的回答!不过我不熟悉$cond,所以在测试之前,我会阅读文档以了解您的代码。完成后,我会在这里发表评论。
var resultado = db.cidade.aggregate({"$group": {"_id": null, "avgHab": {"$avg": "$qtdhab"}}}).toArray()
var resultado2 = db.cidade.find({qtdhab: {$lte: resultado[0].avgHab}}).toArray()
resultado2.aggregate({"$group": {"_id": null, "maxHab": {"$max": "$qtdhab"}}})
db.cidade.aggregate([
    /*find the avg and keep also the aggregated field*/
    {"$group": {
        "_id": null, 
        "qtdhab" : {"$push" :"$qtdhab"},
        "avgHab": {"$avg": "$qtdhab"}
    }},
    /*unwind the array*/
    {$unwind: "$qtdhab"},
    /*get the max from the fields less than the avg*/
    {"$group": {
        "_id": null, 
        "res" : {"$max" : {$cond :[{$lte :["$qtdhab", "$avgHab"]}, "$qtdhab", null]} },
    }}
])