Trước khi bắt đầu, tôi sẽ thêm hai điểm-
- Khi sử dụng mongo, hãy luôn chèn các vị trí theo cách [long., lat.]
- Vui lòng chỉ định loại hình bạn đang chèn. Tham khảo mongoDB tài liệu để biết thêm thông tin về các loại.
Đến với truy vấn của bạn, tôi đã thêm ba điểm như câu hỏi của bạn và dữ liệu của tôi trông giống như bên dưới-
> db.test.find()
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }
{ "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ] }
{ "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ] }
Tôi đã cung cấp loại:"Point" vì đây là khóa dành riêng để sử dụng các vị trí kiểu hình cầu trong mongo. Hơn nữa, tôi đã thêm [long, lat] cho vị trí. Sau đó, tôi đã thêm chỉ mục 2dSphere trên trường loc.
db.test.createIndex({loc:"2dsphere"})
Sau đó, tôi thực hiện truy vấn dưới đây để biết khoảng cách từ Marathahalli [77,6974,12.9591] -
> db.test.aggregate([ {$geoNear: { near :{type: "Point", coordinates:[77.6974,12
.9591]}, distanceField: "distance", spherical: true } } ])
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ], "distance": 9583.305405402776 }
{ "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ], "distance" : 12391.53898270671 }
{ "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ], "distance": 13828.057829128267 }
Truy vấn trên chỉ nhằm mục đích thử nghiệm để biết khoảng cách. Nó cho biết khoảng cách bằng mét để tôi có thể dễ dàng chuyển đổi nó thành km.
Bây giờ tôi đã chạy truy vấn dưới đây để tìm các vị trí từ Marathahalli trong vòng 10 km. khoảng cách và tôi đã nhận được kết quả mong muốn của mình-
> db.test.find({ loc:{ $near:{ $geometry: {type: "Point" , coordinates:[77.6974,12.9591] }, $maxDistance:10000 }}})
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }
Tôi đã tìm thấy một số vấn đề với cách tiếp cận mà bạn đang thử-
- Vị trí phải được cung cấp theo cách [lâu, vĩ độ].
- loại:"Điểm" phải được cung cấp để sử dụng vị trí loại điểm. Đây là từ khóa dành riêng.
- Khoảng cách sẽ được tính bằng mét ở đây. Ở một số nơi, nó được chụp bằng radian cũng như ở Mongo. Vui lòng tham khảo điều này doc mongoDB để biết thêm thông tin về khoảng cách radian.
Hy vọng nó sẽ giúp bạn ... có một ngày tốt lành ... :)