2011-10-20 22 views
26

Tôi đang cố gắng để có được đầu của tôi xung quanh MongoDB và tìm kiếm không gian địa lý. Về cơ bản những gì tôi muốn là để người dùng có thể truy vấn tài liệu (hình ảnh) mà được quay trong khoảng cách đã đặt từ vị trí hiện tại của người dùng. Vì vậy, tôi là người dùng đang tìm kiếm tất cả các hình ảnh được quay trong vòng 1 km từ nơi anh ấy đứng Tôi cố gắng sử dụng ví dụ bên dưới nhưng tôi không biết phải đặt giá trị maxdistance như thế nào.Các đơn vị sử dụng cho maxdistance và MongoDB?

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

Vì vậy, câu hỏi của tôi là đặt làm tối đa nếu tôi tìm kiếm tài liệu trong bán kính 1 km?

Tôi hoàn toàn bị kẹt ở đây.

Trả lời

62

Để sử dụng mongodb $near truy vấn có giới hạn km, bạn cần phải chuyển đổi giá trị bán kính thành km. Theo mặc định, mongodb $ gần chấp nhận $maxDistanceradius.

Chuyển đổi khoảng cách bởi 111.12 (một mức độ là khoảng 111,12 km) khi sử dụng km, hoặc để lại khoảng cách vì nó là về việc sử dụng độ

cho câu hỏi của bạn

những gì tôi thiết lập như maxdistance nếu tôi đang tìm kiếm tài liệu trong vòng bán kính 1 km?

bạn có thể sử dụng

db.places.find({ loc : { $near : [50,50] , $maxDistance : 1/111.12 } }) 

Tôi đã trả lời làm thế nào để sử dụng mongo geospatial features here in detail. Bạn có thể kiểm tra

+0

mát, cảm ơn! Sự khác nhau giữa $ gần và $ nearSphere là gì? –

+13

$ gần giả định một mô hình lý tưởng của một trái đất bằng phẳng, có nghĩa là một arcdegree vĩ độ (y) và kinh độ (x) đại diện cho cùng một khoảng cách ở khắp mọi nơi. Vì vậy, bạn phải chuyển đổi bán kính bằng 111 hoặc 69 để có được những results.But $ nearSphere bạn cần phải chuyển đổi bán kính bằng (6371 km hoặc 3959 dặm) để làm cho nó làm việc ... bạn có thể đọc thêm về [ở đây] (http : //www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-TheEarthisRoundbutMapsareFlat) – RameshVel

+0

Có thể truy vấn một phần không? – Karl

15

Kể từ phiên bản 2.4 của MongoDB bạn có thể xác định bán kính trực tiếp trong mét như một giá trị của $ maxDistance, như thế này:

db.<collection>.find({loc: {$near : 
           {$geometry : 
            { 
            type: 'Point', 
            coordinates: [<longitude> , <latitude>]  
            } 
           }, 
           $maxDistance: 10*100 
          } 
        }); 
+1

Nó phụ thuộc vào chỉ mục. Nếu chỉ mục là '2d', điều này sẽ không hoạt động, bởi vì chỉ mục 2d giả định« định dạng radian ». Nếu chỉ mục mặt khác là '2dsphere' bạn đúng. :-) Tài liệu: https://docs.mongodb.com/manual/reference/operator/query/near/#query-on-legacy-coordinates – qualbeen

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