MongoDB GeoNear Aggregate



问题是:

考虑以下位置:[- 72,42]以及围绕该点半径为2的范围(圆)。编写一个查询来查找与这个范围(圆)相交的所有状态。然后,您应该返回这些州的总人口和城市数量。根据城市数量对各州进行排名。

我写了这么多:

db.zips。附近找到({loc:{$: -72年,42岁,$ maxDistance: 2}})

,其输出示例为:{"城市":"伍德斯托克"、"疯狂的":[-72.004027,41.960218],"流行":5698年,"状态":"CT"、" _id ": " 06281 "}

在SQL中,我将简单地按"状态"做一个组,我如何能够在这里做到这一点,同时还计算所有城市和总人口?

假设您遵循monegimport例程获取其zipcode数据(我将我的zips7纳入一个集合):

mongoimport——db mydb——collection zips7——type json——file c:usersdrewdownloadszips.json

mongoimport——db mydb——collection zips7——type json——file/data/playdata/zips.json

(取决于操作系统和路径)

然后

db.zips7.ensureIndex ({loc:"二维"})

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
}

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]}})

相关内容

  • 没有找到相关文章

最新更新