Как я могу найти близлежащее место с широтой и долготой в mongodb?

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

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

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

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


person sanu    schedule 03.11.2014    source источник
comment
Привет, вы можете вставить структуру документа и что вы найдете?   -  person Yogesh    schedule 03.11.2014
comment
@yogesh я не знаю, как найти   -  person sanu    schedule 03.11.2014


Ответы (2)


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

    {
    "_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]}})

для получения дополнительной помощи вы должны обратиться к этому монго $near и $geoNear нажмите здесь

и извините за голанг, потому что я не знаю больше о голанге

для голанга

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)
person Yogesh    schedule 03.11.2014
comment
Не могли бы вы написать код для golang. Я пробовал вот так var place []Place lat := 51.515614 long := -0.268998 E := 0.00002 err = coll.Find(bson.M{loc: bson.M{$near: [long,lat], bson.M {$maxDistance : 0,056}}}).Все(&место) - person sanu; 03.11.2014
comment
Извините, @sanu golang является новым для меня, и для изучения golang для меня требуется время, возможно, вам следует попробовать или подождать кого-то, кто разбирается в golang и конвертирует запрос mongo в golang. - person Yogesh; 03.11.2014
comment
Я думаю, что для локаций на Земле нужно использовать 2dsphere вместо 2d. - person icchanobot; 04.11.2014

Эта ссылка может помочь вам 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}
person Iapilgrim    schedule 03.11.2014