2014-11-03 39 views
3

對mongodb和golang來說,這是非常新的東西。我有一個名爲「myplace」的集合它具有以下文件place_name,city,latitude,longitude。我的問題是用戶在某個地方搜索附近的地方。我如何查詢mongodb以便按位置查找。也在golang。如何在mongodb中查找附近有經度和緯度的地方?

我的文檔結構

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

在此先感謝

+0

嗨,你可以插入文檔的結構,你發現了什麼? – Yogesh 2014-11-03 08:24:13

+0

@yogesh我不知道如何找到 – sanu 2014-11-03 08:25:24

回答

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 2014-11-03 10:30:25

+0

您能否請您爲golang編寫代碼。我想這樣的變種地方[]地點緯度:= 51.515614 \t長:= -0.268998 \t E:= 0.00002 \t ERR = coll.Find(bson.M { 「祿」:bson.M { 「$附近」 :[long,lat],bson.M {「$ maxDistance」:0.056}}})。All(&place) – sanu 2014-11-03 10:46:52

+0

對不起@sanu golang對我來說是新的,對於我來說學習golang需要時間,也許你應該嘗試或等待一位專家在golang並將mongo查詢轉換爲golang。 – Yogesh 2014-11-03 10:57:27

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} 
相關問題