问题是:
考虑以下位置:[ - 72,42]和此点周围的半径2的范围(圆)。编写查询以查找与此范围相交的所有状态(圆圈)。然后,您应该返回每个州的总人口和城市数量。根据城市数量对州进行排名。
到目前为止我写过:
db.zips.find({loc:{$ near:[ - 72,42],$ maxDistance:2}})
,其示例输出为: {“city”:“WOODSTOCK”,“loc”:[ - 72.004027,41.960218],“pop”:5698,“state”:“CT”,“_ id”:“06281”}
在SQL中,我只是按“状态”进行分组,如何计算所有城市和总人口,我将如何做到这一点?
答案 0 :(得分:1)
假设您按照mongoimport例程获取其邮政编码数据(我将其带入了一个名为zips7的集合中):
mongoimport --db mydb --collection zips7 --type json --file c:\ users \ drew \ downloads \ zips.json
或
mongoimport --db mydb --collection zips7 --type json --file /data/playdata/zips.json
(取决于您的操作系统和路径)
然后
db.zips7.ensureIndex({LOC: “2D”})
db.zips7.find({loc: {$near: [-72, 42], $maxDistance: 2}}).forEach(function(doc){
db.zips8.insert(doc);
});
请注意,db.zips7.stats()显示为30k行,zips8有100行
db.zips8.aggregate( { $group :
{ _id : "$state",
totalPop : { $sum : "$pop" },
town_count:{$sum:1}
}}
)
{
"result" : [
{
"_id" : "RI",
"totalPop" : 39102,
"town_count" : 10
},
{
"_id" : "MA",
"totalPop" : 469583,
"town_count" : 56
},
{
"_id" : "CT",
"totalPop" : 182617,
"town_count" : 34
}
],
"ok" : 1
}
答案 1 :(得分:0)
mongoid中的语法
Zips.where(:loc => {"$within" => {"$centerSphere"=> [[lng.to_f,lat.to_f],miles.to_f/3959]}})
示例:
Zips.where(:loc => {"$within" => {"$centerSphere"=> [[-122.4198185,37.7750454],2.0/3959]}})