2013-05-04 3 views
1

Вопрос заключается в том:MongoDB GeoNear Совокупный

Рассмотрим следующее расположение: [-72, 42], и диапазон (круг) радиуса 2 вокруг этой точки. Напишите запрос, чтобы найти все состояния, которые пересекают этот диапазон (круг). Затем вы должны вернуть общую численность населения и количество городов для каждого из этих состояний. Ранжируйте состояния, основанные на количестве городов.

Я написал это до сих пор:

db.zips.find ({LOC: {$ вблизи: [-72, 42], $ maxDistance: 2}})

и образец вывода из которых: {"city": "WOODSTOCK", "loc": [-72.004027, 41.960218], "pop": 5698, "state": "CT", "_id": "06281"}

В SQL я бы просто сделал группу по «состоянию», как бы я мог сделать это здесь, а также подсчитывать все города и общее население?

+0

Я не думаю, что достаточно группировать по штату, чтобы делать все, что вы хотите делать в SQL или в MongoDB. Но как находка делает то, что вы хотите? Вы хотите, чтобы все состояния пересекали этот диапазон - это не то, что вы здесь находите - вы находите все _cities_, которые находятся в этом радиусе. Это то, что вы хотите? –

ответ

1

если следовать рутину mongoimport для своих данных ZipCode (я принес мину в коллекцию под названием zips7):

mongoimport --db MYDB --collection zips7 --type --file JSON C: \ Users \ нарисовался \ загрузки \ zips.json

или

mongoimport --db MYDB --collection zips7 --type --file /data/playdata/zips.json 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 
} 
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]}}) 
Смежные вопросы