2013-05-04 4 views
1

문제는이 점을 중심으로 반경 2 [-72, 42] 및 범위 (원)MongoDB를 GeoNear 집계

다음 위치를 고려한다. 이 범위 (원)를 교차하는 모든 상태를 찾으려면 쿼리를 작성하십시오. 그런 다음 총 인구와 각 주마다 도시 수를 반환해야합니다. 도시 수에 따라 주를 평가하십시오.

db.zips.find ({LOC : $ {근처 [-72, 42], $ maxDistance 2}})

및 I 출력 샘플은 지금까지이 작성한

예 : { "도시": "우드 스탁", "loc": [-72.004027, 41.960218], "팝": 5698, "상태": "CT", "_id": "06281"}

SQL에서는 단순히 "주"로 그룹을 만들 것입니다. 어떻게 모든 도시와 전체 인구를 계산하면서이 작업을 수행 할 수 있습니까?

mongoimport --db MYDB --collection zips7 --type JSON --file C :

+0

SQL 또는 MongoDB에서 수행하려는 모든 작업을 상태별로 그룹화하는 것으로 충분하지 않다고 생각합니다. 하지만 당신이 원하는 것을 어떻게 발견 할 수 있습니까? 이 범위와 교차하는 모든 주를 원합니다. 여기에서 찾으려는 것이 아닙니다. 해당 반경 내에있는 모든 계급을 찾습니다. 너가 원하는게 그거야? –

답변

1

당신이 (내가 모음이라고 zips7에 광산을 가져왔다)의 우편 번호 데이터에 대한 mongoimport 루틴을 따라 가정 \ 사용자 \ 드류 \ 다운로드 \ zips.json

또는

mongoimport --db MYDB --collection zips7 --type JSON --file /data/playdata/zips.json

(OS에 따라와 경로)

012 3,516,

다음

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 
} 
이 있는지 mongoid

Zips.where(:loc => {"$within" => {"$centerSphere"=> [[lng.to_f,lat.to_f],miles.to_f/3959]}}) 

실시 예

0

구문 :

,
Zips.where(:loc => {"$within" => {"$centerSphere"=> [[-122.4198185,37.7750454],2.0/3959]}})