Геопространственный индекс MongoDB для массива (multikey + геопространственный) - PullRequest
1 голос
/ 06 апреля 2011

Вот упрощенная версия моих данных:

> db.foo.insert({"name" : "jim",  "locations" : [[10,10],[3,6],[1,2]]})
> db.foo.insert({"name" : "john",  "locations" : [[1,5],[2,4]]})

Я хотел бы иметь возможность делать такие вещи, как

> db.foo.find( { locations : { $near : [5,5] } } )

Есть ли способ создания геопространственного индекса намассив?Выполнение:

> db.foo.ensureIndex({locations: "2d"}) 

дает следующую ошибку:

geo values have to be numbers: { 0: [ 1.0, 5.0 ], 1: [ 2.0, 4.0 ] }

Любой совет или ресурсы будут очень признательны.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

В настоящее время геопространственные индексы MongoDB поддерживают только 2 координатных индекса; Вы также можете иметь только один геопространственный индекс на коллекцию.

Они должны быть либо массивом из двух числовых значений, либо документом с двумя числовыми значениями.

Массив:

  [40.889248, -73.898583]

Документ:

{ "lat" : 40.889248, "lon" : -73.898583 }
1 голос
/ 14 июня 2015

У меня была похожая проблема, мое решение состояло в том, чтобы сохранить местоположение в отдельном объекте местоположения и использовать многоключевой индекс. В этом случае ваши документы могут выглядеть примерно так:

{"name" : "jim",  "locations" : [{"location": [10, 10]}, {"location": [3, 6]}, {"location": [1, 2]}]}

и sureIndex будет выглядеть примерно так

db.foo.ensureIndex({"locations.location": "2d"}) // could also use 2dsphere 
...