2010-12-31 26 views
6

Trong các tài liệu, nó nói rằng theo mặc định, Mongo đối xử với nó như lat/dài:Làm cách nào để chạy truy vấn không gian địa lý ở Mongo?

Theo mặc định, chỉ số giả định bạn đang indexing vĩ độ/kinh độ và là do đó cấu hình cho một [-180. .180] phạm vi giá trị.

Vì vậy, chúng ta hãy nói rằng tôi có điều này trong tài liệu của tôi:

post['loc'] = [ -40.234, 56.222] 
db.mycollection.save(post) 

tôi đảm bảo chỉ số của tôi:

db.mycollection.ensureIndex({"loc":"2d"}) 

Bây giờ, làm thế nào để thực hiện như sau trong Mongo?

  • Hãy cho tôi tất cả các tài liệu có trong vòng 5 dặm của một số lat/long
  • Hãy cho tôi tất cả các tài liệu trong vòng 400 mét của một số lat/long

Trả lời

6

Sử dụng $near trong conjuction với $maxDistance:

db.mycollection.find({loc: {$near: [50, 50], $maxDistance: 5}}) 

đơn vị $maxDistance là giống như loc lĩnh vực, tức là độ. Một mức độ xấp xỉ 69 dặm hay 111 km ở đường xích đạo, nếu tôi nhớ chính xác (nhưng nó là ít hơn ở các vĩ độ khác, khoảng cách chính xác rất khó để tính toán).

Để biết thêm thông tin về các vị trí được trả lại, bạn có thể sử dụng lệnh geoNear, lệnh này sẽ cho bạn biết khoảng cách của tất cả các bộ sưu tập được trả lại, trong số những thứ khác. Xem http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand

Tôi nghĩ bạn cũng có thể sử dụng $geoWithin để giải quyết vấn đề của bạn:

db.mycollection.find({loc: {$geoWithin: {$center: [[50, 50], 5/3959]}}}) 

này nên tìm tất cả các địa điểm trong vòng tròn trung tâm tại (50, 50) với bán kính 5/3959 độ (tức là 5 dặm).

+0

Bạn là người giỏi nhất! – Ali

Các vấn đề liên quan