示例文档
{
"_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年最大的指数,以及拥有该指数的市政当局是什么。但我没有得到
答案 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"}}
}
])