mongodb 获取城市平均人口的查询
mongodb query to get average of cities population
我正在做一个在线练习,它说:
请计算加利福尼亚州(缩写CA)和纽约州(NY)(合计)人口超过25,000 的城市的平均人口。
对于这个问题,假设一个城市名称出现在多个州代表两个不同的城市。
请注意:
不同的州可能有相同的城市名称。
一个城市可能有多个邮政编码。
一个文档:
db.zips.findOne()
{
"_id" : "92278",
"city" : "TWENTYNINE PALMS",
"loc" : [
-116.06041,
34.237969
],
"pop" : 11412,
"state" : "CA"
}
我的查询:
db.zips.aggregate([{$group:{ _id: {state: "$state", city: "$city", zip: "$_id"
}, pop: {$sum: "$pop"}}},{$match:{pop:{"$gt":25000}, "_id.state": {$in: ["CA", "
NY"]}}}, {$group: {_id:0, avg: {$avg: "$pop"}}}])
{ "_id" : 0, "avg" : 41485.69565217391 }
但这不正确,我错过了什么?
我想说的是,一个城市可以有不同的邮政编码,在您的查询中,您将具有不同邮政编码的城市视为不同的城市。
所以,我将从您的第一组中删除 zip 部分:
db.zips.aggregate([
{
$group: {
_id: {state: "$state", city: "$city"},
pop: {$sum: "$pop"}
}
},
{
$match:{
pop:{"$gt":25000}, "_id.state": {$in: ["CA", "NY"]}
}
},
{
$group: {
_id:0,
avg: {$avg: "$pop"}
}
}
])
您可以尝试使用以下代码找出该州的平均人口。您还可以找到其他相关信息
例如哪个是最大或最小的城市以及使用聚合器的同一查询中的人口,如下所示。
db.zips.drop()
db.zips.insert({
"_id" : "1",
"city" : "C1",
"pop" : 100,
"state" : "CA"
})
db.zips.insert({
"_id" : "2",
"city" : "C2",
"pop" : 50,
"state" : "CA"
})
db.zips.insert({
"_id" : "3",
"city" : "C3",
"pop" : 500,
"state" : "CA"
})
db.zips.insert({
"_id" : "4",
"city" : "C4",
"pop" : 80,
"state" : "CA"
})
db.zips.aggregate([{$group:{ _id: {state: "$state", city : "$city"}, pop: {$sum : "$pop"} }},
{ $sort: { pop: 1 } },
{ $group:
{
_id : "$_id.state",
biggestCity: { $last: "$_id.city" },
biggestPop: { $last: "$pop" },
smallestCity: { $first: "$_id.city" },
smallestPop: { $first: "$pop" }
}
}
])
您可以在下面找到全部信息 link。
http://docs.mongodb.org/manual/tutorial/aggregation-zip-code-data-set/
-$achin.
我正在做一个在线练习,它说: 请计算加利福尼亚州(缩写CA)和纽约州(NY)(合计)人口超过25,000 的城市的平均人口。
对于这个问题,假设一个城市名称出现在多个州代表两个不同的城市。
请注意: 不同的州可能有相同的城市名称。 一个城市可能有多个邮政编码。
一个文档:
db.zips.findOne()
{
"_id" : "92278",
"city" : "TWENTYNINE PALMS",
"loc" : [
-116.06041,
34.237969
],
"pop" : 11412,
"state" : "CA"
}
我的查询:
db.zips.aggregate([{$group:{ _id: {state: "$state", city: "$city", zip: "$_id"
}, pop: {$sum: "$pop"}}},{$match:{pop:{"$gt":25000}, "_id.state": {$in: ["CA", "
NY"]}}}, {$group: {_id:0, avg: {$avg: "$pop"}}}])
{ "_id" : 0, "avg" : 41485.69565217391 }
但这不正确,我错过了什么?
我想说的是,一个城市可以有不同的邮政编码,在您的查询中,您将具有不同邮政编码的城市视为不同的城市。
所以,我将从您的第一组中删除 zip 部分:
db.zips.aggregate([
{
$group: {
_id: {state: "$state", city: "$city"},
pop: {$sum: "$pop"}
}
},
{
$match:{
pop:{"$gt":25000}, "_id.state": {$in: ["CA", "NY"]}
}
},
{
$group: {
_id:0,
avg: {$avg: "$pop"}
}
}
])
您可以尝试使用以下代码找出该州的平均人口。您还可以找到其他相关信息 例如哪个是最大或最小的城市以及使用聚合器的同一查询中的人口,如下所示。
db.zips.drop()
db.zips.insert({
"_id" : "1",
"city" : "C1",
"pop" : 100,
"state" : "CA"
})
db.zips.insert({
"_id" : "2",
"city" : "C2",
"pop" : 50,
"state" : "CA"
})
db.zips.insert({
"_id" : "3",
"city" : "C3",
"pop" : 500,
"state" : "CA"
})
db.zips.insert({
"_id" : "4",
"city" : "C4",
"pop" : 80,
"state" : "CA"
})
db.zips.aggregate([{$group:{ _id: {state: "$state", city : "$city"}, pop: {$sum : "$pop"} }},
{ $sort: { pop: 1 } },
{ $group:
{
_id : "$_id.state",
biggestCity: { $last: "$_id.city" },
biggestPop: { $last: "$pop" },
smallestCity: { $first: "$_id.city" },
smallestPop: { $first: "$pop" }
}
}
])
您可以在下面找到全部信息 link。
http://docs.mongodb.org/manual/tutorial/aggregation-zip-code-data-set/
-$achin.