Преди да започна бих добавил две точки-
- Когато използвате mongo, винаги вмъквайте местоположения по [long., lat.] начин
- Моля, посочете типа на геометрията, която вмъквате. Вижте mongoDB документация за повече информация относно типовете.
Стигайки до вашата заявка, добавих три точки като въпрос и данните ми изглеждат по-долу-
> 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 ] }
Дадох тип:„Точка“, защото това е запазен ключ за използване на местоположения от сферичен тип в mongo. Освен това добавих [long, lat] за местоположение. По-късно добавих 2dSphere индекс към полето loc.
db.test.createIndex({loc:"2dsphere"})
След това изпълних заявката по-долу, за да знам разстоянието от 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 }
Горната заявка е само с цел тестване, за да се знае разстоянието. Показва разстоянието в метри, така че мога лесно да го конвертирам в километри.
Сега пуснах по-долу заявка, за да намеря местоположения от Marathahalli в рамките на 10 км. разстояние и постигнах желания резултат-
> db.test.find({ loc:{ $near:{ $geometry: {type: "Point" , coordinates:[77.6974,12.9591] }, $maxDistance:10000 }}})
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }
Открих няколко проблема с подхода, който опитвате-
- Местоположенията трябва да бъдат посочени по [long, lat] начин.
- тип:"Точка" трябва да бъде зададена за използване на местоположение тип точка. Това е запазена ключова дума.
- Тук разстоянието ще бъде взето в метри. На няколко места се приема и в радиани в Монго. Моля, вижте това mongoDB doc за повече информация относно радианното разстояние.
Надяваме се, че ще ви помогне...приятен ден...:)