Mongodb находит запрос с $near и координаты не работают

Я пытаюсь использовать некоторые функции геолокации в mongodb. Использование запроса поиска с $рядом не работает!

В настоящее время у меня есть этот объект в моей базе данных:

{
    "Username": "Deano",
    "_id": {
        "$oid": "533f0b722ad3a8d39b6213c3"
    },
    "location": {
        "type": "Point",
        "coordinates": [
            51.50998,
            -0.1337
        ]
    }
}

У меня также установлен следующий индекс:

{
  "v": 1,
  "key": {
    "location": "2dsphere"
  },
  "ns": "heroku_app23672911.catchmerequests",
  "name": "location_2dsphere",
  "background": true
}

Когда я запускаю этот запрос:

db.collectionname.find({ "location" : { $near : [50.0 , -0.1330] , $maxDistance : 10000 }})

Я получаю эту ошибку:

error: {
    "$err" : "can't parse query (2dsphere): { $near: [ 50.0, -0.133 ], $maxDistance: 10000.0 }",
    "code" : 16535
}

Кто-нибудь знает, где я ошибаюсь? Любая помощь будет высоко оценена!

5
задан DeaIss 05 апр. '14 в 16:17
источник поделиться

2 ответов

Кажется, вам нужно использовать формат GeoJSON, если ваши данные также находятся в формате GeoJSON, как и у вас. Если вы используете:

db.collectionname.find({
    "location": {
        $near: {
            $geometry:
                { type: "Point", coordinates: [50.0, -0.1330] }, $maxDistance: 500
        }
    }
})

он должен работать. Я мог бы реплицировать вашу ошибку с использованием формата хранения GeoJSON для поля, но то, что docs вызывает устаревшие точки в выражении запроса. Я думаю, что документы немного неясны в том смысле, что они предполагают, что вы можете использовать GeoJSON и устаревшие координаты с индексом 2dsphere 2dsphere

Я использую 2.4.10, для чего это стоит, так как в релизе 2.4 произошли большие изменения в пространственном пространстве.

11
ответ дан John Powell aka Barça 05 апр. '14 в 23:57
источник поделиться

Это не совсем решение, так как я никогда не работал над этим, но используя geoNear мне удалось получить то, что я хотел.

db.runCommand( { geoNear : 'catchmerequests', near: 
{ type: 'Point', coordinates : [50, 50] }, spherical : true } );

Если кто-то может узнать, почему первоначальная попытка $near не удалась, это все равно будет оценено, но я отправляю это для всех, кто еще ищет рабочую альтернативу.

1
ответ дан DeaIss 05 апр. '14 в 20:25
источник поделиться

Другие вопросы по меткам