Многоключевой индекс MongoDB

Я хочу убедиться, что создаю правильный индекс для своей структуры данных (документы в mongodb).

Мой документ содержит список элементов, и каждый элемент содержит список местоположений. Я ищу элементы, используя их местоположение, и хочу создать правильный индекс для такого рода поиска.

   { # <- document
      "items": [
           {   # <- first item
               "name": "Item Name",
               "locations": [
                    { # <- first location
                       "sw":{"lat":0, "lng":0},
                       "ne":{"lat":0, "lng":0},
                    },
                    { # <- second location
                       "sw":{"lat":0, "lng":0},
                       "ne":{"lat":0, "lng":0},
                    },
                    { # <- more locations...
                      ...
                    },
               ]
           },
           {   # <- second item
              ...
           }
      ]
   }

Я ищу элементы, используя значения lat и lng, и я использовал "ensureIndex" со следующим ключом для создания индекса:

db.<collection>.ensureIndex({"items.locations.sw.lat":1});
db.<collection>.ensureIndex({"items.locations.sw.lng":1});
db.<collection>.ensureIndex({"items.locations.ne.lat":1});
db.<collection>.ensureIndex({"items.locations.ne.lng":1});

Это правильный путь?

Спасибо


person Ziv    schedule 18.05.2014    source источник
comment
Скорее всего, вы захотите использовать для этого геопространственный индекс: docs. mongodb.org/manual/core/indexes-introduction/   -  person JohnnyHK    schedule 18.05.2014
comment
Что такое sw и ne? Я не понимаю, почему вы используете 2 места для каждого элемента.   -  person kranteg    schedule 18.05.2014
comment
@kranteg юго-восток и северо-запад, 2 точки, обозначающие границы.   -  person Ziv    schedule 19.05.2014
comment
Я уверен, что это неправильный путь, но я не нахожу способа сделать это. Возможно, используйте тип GeoJSON MultiPoint: docs.mongodb.org/manual/core/2dsphere/# многоточечный. Будьте осторожны с порядком координат, GeoJSON работает с долготой, широтой (противоположно вашему дизайну). Я добавляю тег GeoJSON к вашему вопросу.   -  person kranteg    schedule 19.05.2014
comment
@kranteg, в документации Mongodb — все примеры, связанные с геопространственными данными/GeoJSON и т. д., показывают, как проверить, находится ли сохраненное местоположение в поле, полигоне и т. д. Я пытаюсь сделать наоборот — у меня есть список геополей, хранящихся в моей базе данных, и я Я пытаюсь найти поле, содержащее определенное место.   -  person Ziv    schedule 19.05.2014