Порядок аргументов в запросе MongoDB find- $ near - PullRequest
3 голосов
/ 03 марта 2012

Если я выполняю следующий запрос в оболочке MongoDB, все в порядке:

db.users.find({location: {$near: [52.3, 6.6], $maxDistance: 0.27}})

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

db.users.find({location: {$maxDistance: 0.27, $near: [52.3, 6.6]}})

Mongoвозвращает следующую ошибку:

error: {
    "$err" : "geo values have to be numbers: { $maxDistance: 0.27, $near: [ 52.3, 6.6 ] }",
    "code" : 13026
}

Видимо, порядок аргументов словаря запросов важен, что мне кажется странным.Кто-нибудь может пролить свет на это?Я использую MongoDB 2.0.2.

Необходимый порядок создает для меня проблему, так как я динамически создаю словарь и (не хочу) не могу контролировать порядок, в котором ключи сериализуются (что,бывает тот, кто излагает ошибку).

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Что ж, очевидно, Mongo ожидает упорядоченный словарь (так называемые SON) для некоторых команд, например $near -query.

В Python это делается путем преобразования словаря в SON, как:

from pymongo.son import SON

s = SON({'$near': [50, 50]})
s['$maxDistance'] = 0.27
db.users.find({'geoloc': s})
1 голос
/ 03 марта 2012

В общем, mongodb проверяет только первый элемент в BsonDocument для специальной команды / запроса, я думаю, из соображений производительности.Кто-то уже сообщал об этой проблеме на SERVER-1990

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...