Запрос индекса 2dsphere возвращает все документы

Я использую MongoDB 2.6.1 на Mac OS X

У меня есть коллекция locations с действительным GeoJSON поле:

db.locations.findOne({}, {"location": 1})
{
1"_id" : ObjectId("534fd2b6b13e51768cd0e9c8"),
"location" : {
    "type" : "Point",
    "coordinates" : [
        41.311,
        56.3526
    ]
}
}

я имею 2dsphere Индекс в моей базе данных:

db.locations.getIndexes()
[   
{
    "v" : 1,
    "key" : {
        "location" : "2dsphere"
    },
    "ns" : "insta_locations.locations",
    "name" : "location_2dsphere"
},
...
]

Но когда я запрашиваю местоположения без подсказки, я получаю сообщение об ошибке:

db.locations.find({
    location: {
        $near: {
            $geometry: {
                type: "Point",
                coordinates: [41.311, 56.35]
            },
            $maxDistance: 1
        }
    }
})

производит:

ошибка: {"$ err": "не удается найти специальный индекс: 2d для: {location: {$ near: {$ geometry: {type: \" Point \ ", координаты: [ 41.311, 56.35 ] }, $maxDistance: 1.0 } } }", "code": 13038 }

С другой стороны, с подсказкой возвращает всю коллекцию:

db.locations.find({
    location: {
        $near: {
            $geometry: {
                type: "Point",
                coordinates: [41.311, 56.35]
            }, 
            $maxDistance: 1
        }
    }
}).hint('location_2dsphere').length()

5138

Кто-нибудь знает, что мне не хватает, чтобы заставить его работать должным образом?

Обновить

> version()
2.6.1
> db.version()
2.2.2

1 ответ

Решение

Вы используете оболочку mongo из версии 2.6.1, но у вас все еще есть версия mongod из 2.2.2. Это может произойти при установке Mac OS X, когда вы используете homebrew, macports или их комбинацию. По сути, mongod, который стоит первым на вашем пути, не является последней версией. Чтобы исправить, я бы попробовал следующее:

  1. Выясните, откуда бегут монго и монгод, запустив слова "какой монго" и "какой монгод".
  2. Проверьте свой путь, выполнив "echo $PATH"
  3. Найдите правильный файл Mongod.
  4. Измените путь в вашем профиле, чтобы сначала найти правильный каталог для mongod.

Или вы можете просто использовать полный путь к правильному mongod при запуске mongodb.

Или вы можете просто загрузить его снова прямо из mongodb.

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