如何在mongodb中查询

时间:2014-04-09 13:55:30

标签: mongodb

示例文档

{
    "_id" : ObjectId("5338796453370917f05bb064"),
    "Sigla" : "CE",
    "Regiao" : "Nordeste",
    "Codigo" : 2306009,
    "Municipio" : "Iracema",
    "1991" : 52.40499877929688,
    "2000" : 108.7089996337891,
    "IDHEducacao" : {
        "1991" : 0.516,
        "2000" : 0.735
    }
}
{
    "_id" : ObjectId("5338796453370917f05bb065"),
    "Sigla" : "CE",
    "Regiao" : "Nordeste",
    "Codigo" : 2306108,
    "Municipio" : "Irauçuba",
    "1991" : 47.72299957275391,
    "2000" : 62.65800094604492,
    "IDHEducacao" : {
        "1991" : 0.491,
        "2000" : 0.692
    }
}

---> mongodb的

我做了以下查询

{"$group":
    {
        "_id":{"Regiao":"$Regiao"},
                "IDHEducao_max_2000" : {"$max" : "$2000"},      
    }
}

我想展示该地区,这是该地区2000年最大的指数,以及拥有该指数的市政当局是什么。但我没有得到

1 个答案:

答案 0 :(得分:-1)

看起来2000是文档中某个字段的名称,我觉得很奇怪。

下面的SQL:

SELECT Regiao, MAX( 2000 ) AS Indice FROM table1 GROUP BY Regiao

可以用MongoDB编写

db.table1.aggregate([
    {"$group": {
        "_id":{"Regiao":"$Regiao"},
        "IDHEducao_max_2000" : {"$max" : "$2000"}}
    },
    {"$project": {"_id":0, "Regiao":"$_id", "Indice":"$IDHEducao_max_2000"}}
]}

但是这个SQL:

SELECT Sigla, Regiao, Municipio, MAX( 2000 ) AS Indice FROM table1 GROUP BY Regiao

有效。使用GROUP BY时,只能选择GROUP BY中使用的字段或其他字段的聚合值(即SUM(),COUNT()等)。但是,如果您只需要其他字段的值,则可以使用$first$last运算符。请注意,这些运算符通常仅在排序阶段之后用于获取min / max:

db.table1.aggregate([
    {"$group": {
        "_id":{"Regiao":"$Regiao"},
        "Sigla" : {"$first" : "$Sigla"}}
        "Municipio" : {"$first" : "$Municipio"}}
        "IDHEducao_max_2000" : {"$max" : "$2000"}}
    },
    {"$project": {"_id":0, "Sigla":1, "Regiao":"$_id", "Municipio":1,
                  "Indice":"$IDHEducao_max_2000"}}
]}

编辑: OP更新了以下问题:

  

我想展示该地区,这是该地区2000年最大的指数,以及拥有该指数的市政当局是什么。

如果您使用聚合管道的$sort阶段,然后使用$group阶段并使用$first运算符,则可以获得所需的结果:

db.table1.aggregate([
    // Sort by (City ASC, Index DESC)
    {$sort:{"Regiao":1, "2000":-1}}, 
    // Group by City and get the max Index and corresponding Municipality
    {$group:{
        _id:"$Regiao", 
        Index:{$first:"$2000"}, 
        Municipio:{$first:"$Municipio"}}
    }
])