Хранить данные о местонахождении в документе Mongodb - PullRequest
1 голос
/ 24 января 2020

В моем текущем проекте я храню данные о местоположении в следующем формате в документе Mongodb

"location" : {
        "loc" : {
            "lng" : -118.15592692,
            "lat" : 34.03566804
        },
        "geocode" : {
            "city" : "East Los Angeles",
            "state" : "CA",
            "zipcode" : "90022",
            "countrycode" : "US",
            "country" : "United States"
        }
    }

В поле location.lo c создан двухмерный индекс: -

{
    "location.loc" : "2d"
}

Но геопространственные запросы занимают много времени, когда результирующий набор большой, то есть более 7000 записей. мне кажется, что индекс не работает. Это потому, что данные не были сохранены в формате: -

loc: [-118.15592692, 34.03566804]

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

1 Ответ

1 голос
/ 24 января 2020

Обновите ваши документы и создайте новую коллекцию

db.location.aggregate([
  { "$addFields": {
    "location": {
      "type": "Point",
      "coordinates": ["$location.loc.lng", "$location.loc.lat"]
    },
    "geocode": "$location.geocode"
  }},
  { "$out": "location" }
])

Затем создайте индекс для location поля

db.location.createIndex({ "location": "2d" })
...