2011-04-06 4 views
0

Вот упрощенная версия моих данных:MongoDB геопространственной индекс массива (MultiKey + геопространственной)

> 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

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

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

Массив:

[40.889248, -73.898583] 

Документ:

{ "lat" : 40.889248, "lon" : -73.898583 } 
+0

Это не ответ, который я надеялся, но спасибо. – YXD

1

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

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

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

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

это, похоже, не позволяет запрашивать с помощью массивов местоположений одного элемента, чтобы найти что-нибудь, что является тремя элементами и т. Д. Я прав, думая, что этот метод использует многокамерные индексы? – bmbigbang

Смежные вопросы