2014-11-03 2 views
3

Я очень новичок в mongodb и golang. У меня есть коллекция под названием «myplace». Она имеет следующие имена: place_name, city, latitude, longitude. Мой вопрос - это пользователь в каком-то месте и поиск близлежащих мест. Как я могу запросить mongodb, чтобы найти поблизости по местоположению. Также в голанге.Как найти близлежащее место с широтой и долготой в mongodb?

Мой документ структура

{ 
    "_id" : ObjectId("544a2147785b707b340ed6c7"), 
    "latitude" : 12.36547, 
    "longitude" : 1.235689, 
    "place_name" : "some_place", 
    "city" : "Some city" 
} 

Заранее спасибо

+0

Привет Вы можете вставить структуру DOC и то, что вы нашли? – Yogesh

+0

@yogesh Не знаю, как найти – sanu

ответ

7

Привет В вашем случае я думаю, вы должны изменен выше документ, как показано ниже

{ 
    "_id" : ObjectId("545749dba2b0b4cf603a7546"), 
    "city" : "B", 
    "placeName" : "A", 
    "loc" : { 
     "lon" : 51.10682735591432, 
     "lat" : -114.11773681640625 
    } 
} 
{ 
    "_id" : ObjectId("545749f3a2b0b4cf603a7547"), 
    "city" : "B1", 
    "placeName" : "A1", 
    "loc" : { 
     "lon" : 51.09144802136697, 
     "lat" : -114.11773681640625 
    } 
} 

После этого индексирование вышеуказанные документы, как показано ниже

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

Если индексация выполняется неправильно, то напишите следующий запрос, чтобы выяснить, рядом с документами

db.location.find({loc: {$near:[51,-114]}}) 

для получения дополнительной помощи, вы должны передать это Монго $ вблизи и $ geoNear click here

и жаль golang, потому что я не узнать больше о golang

для golang

var places []Place 
lat := 51.515614 
long := -0.268998 
err = coll.Find(bson.M{"loc": bson.M{"$near": []float64{long, lat}, "$maxDistance" :  0.056}}).All(&places) 
+0

Большое спасибо .... – sanu

+0

Не можете написать код для golang. Я попытался как этот вар место [] Место лату: = 51.515614 \t долго: = -0,268998 \t E: = 0,00002 \t ERR = coll.Find (bson.M { "LOC": bson.M { "$ вблизи" : [long, lat], bson.M {"$ maxDistance": 0.056}}}). Все (& place) – sanu

+0

Извините @sanu golang - это новое для меня и для изучения голанга для меня требуется время, возможно, вам стоит попробовать или подождите, пока кто-то, кто станет экспертом в golang и конвертирует запрос mongo в golang. – Yogesh

2

Эта ссылка может помочь вам https://github.com/mendrugory/Airports

MongoDB запрос (питон)

def get_closest_airports(lonlat, limit=10): 
    """ 
    Using a raw query it returns the "limit" closest airports. 

    :param latlon list: 
    :return list of airports: 
    """ 
    return Airport.objects(
     __raw__={"loc": {"$near": {"$geometry": {"type": "Point", "coordinates": lonlat}}}}).limit(limit) 

структура JSON выглядит следующим образом

{"city": "Goroka", "tz": "Pacific/Port_Moresby", "name": "Goroka", "dst": "U", "loc": {"type": "Point", "coordinates": [145.391881, -6.081689]}, "country": "Papua New Guinea", "iata/faa": "GKA", "altitude": 5282.0, "icao": "AYGA", "timezone": 10.0, "id": 1} 
Смежные вопросы