Геопространственный индекс для внутренней структуры - PullRequest
2 голосов
/ 12 октября 2011

У меня есть имена коллекций locations со структурами данных, такими как:

{ 
  "_id" : ObjectId("4e95263f1783ae8487be26d4"),
  "name" : "test 1", 
  "location" : { 
     "coordinate" : { 
        "latitude" : 40.731987, 
        "longitude" : -73.999701
     },
     "address": "xxxxxxx"
  }
}

, и я хочу выполнить гео-запросы к полю location.coordinate.

Когда я пытаюсь добавитьindex Я получаю следующие результаты:

$> db.locations.ensureIndex( { "location.coordinate" : "2d" } )
$> **** SyntaxError: syntax error (shell):0

Можно ли использовать геопространственный индекс для такой структуры?

1 Ответ

4 голосов
/ 12 октября 2011

Поскольку mongodb основан на формате GeoJSON , лучше сначала иметь элемент долготы

"location" : { 
     "coordinate" : {        
        "longitude" : -73.999701,
        "latitude" : 40.731987 
     },

На геопространственной странице mongodb вы можете видеть это в нескольких местах

По умолчанию индекс предполагает, что вы индексируете долготу / широту и таким образом, настроен на диапазон значений [-180..180).

и

Код предполагает, что вы используете десятичные градусы в (долгота, широта) порядок. Этот же порядок используется для спецификации GeoJSON. Использование (широта, долгота) приведет к очень неправильным результатам, но часто порядок используется в другом месте, так что стоит перепроверить. Имена, которые вы назначаете объекту местоположения (если вы используете объект, а не массив) полностью игнорируются, обнаруживается только порядок.

...