Как правильно запросить этот документ?(Если индекс правильный) - PullRequest
0 голосов
/ 02 мая 2019

На моей машине запущен док-контейнер BigChainDB, и я пытаюсь хранить и извлекать геопространственные данные.Я создал через интерфейс MongoDB «расположение» индекса 2dsphere в коллекции «метаданных».Я проверил с помощью команды:

db.people.getIndexes()

И я думаю, что все в порядке, на самом деле результат таков:

    {
        "v" : 2,
        "key" : {
            "loc" : "2dsphere"
        },
        "name" : "loc_2dsphere",
        "ns" : "bigchain.metadata",
        "2dsphereIndexVersion" : 3
    }

Документ, который я вставил, чтобы попробоватьнекоторые пространственные запросы (это результат запроса db.metadata.findOne ()):

{
    "_id" : ObjectId("5ccab10a2ce1b70022823a0f"),
    "id" : "752ee9abccf83c7fd25d86c9a7d12229ae292fa27544f6881f1dbf97ccd8b413",
    "metadata" : {
        "location" : {
            "type" : "Point",
            "coordinates" : [
                22.170872,
                113.578749
            ]
        }
    }
}

Но когда я использую этот пространственный запрос, ничего не получается:

db.metadata.find(
{ 
"metadata": {
     "location": {
       $near: {
         $geometry: {
            type: "Point" ,
            coordinates: [ 22 , 113 ]
         },
       }
     }
  }
})

Я делаю что-то не так, или есть вероятность, что индекс не работает?

1 Ответ

0 голосов
/ 02 мая 2019

Здесь есть несколько проблем.

Во-первых, индекс находится в поле loc, тогда как ваш запрос запрашивает metadata.location.

Если вы попытаетесь создать индекс 2dsphere на metadata.location, вы увидите 2-ю ошибку:

"errmsg" : "invalid point in geo near query $geometry argument: { type: \"Point\", coordinates: [ 22.0, 113.0 ] }  longitude/latitude is out of bounds, lng: 22 lat: 113",

Эта ошибка показывает, что точка GEOJSON, определенная в вашем документе, недопустима, так как широтазначение 113 равно вне допустимого диапазона [-90, 90] .

Перед индексацией необходимо исправить данные на действительный GEOJSON.

...