2014-01-18 2 views
0

Ищу для Монго эквивалентного этого SQL-запрос:MongoDB IP Address МЕЖДУ Query

SELECT country 
FROM geoip 
WHERE 
2921648058 BETWEEN start AND end 

Моих MongoDB Документов выглядеть следующим образом:

{ 
     "_id" : ObjectId("52daefed0c78fc8c9085498d"), 
     "country" : "DE", 
     "end" : "16777471", 
     "start" : "16777216" 
} 

Число IP Адрес преобразуется в Int формата , К сожалению, все поиски по этому поводу возникают только с операторами $ gt и $ lt, которые в этом случае не очень полезны, потому что я не хочу получать документы с определенным полем внутри диапазона, но документы, в которых диапазон при условии, что сам документ соответствует выбранному номеру поиска.
Прохождение всех записей и оценка результата в скрипте не является вариантом из-за массивного размера базы данных.

+1

Я свой вопрос много раз читал, но я не могу понять, почему вы не можете использовать $ GT и $ операторов л. «Старт» должен быть ниже вашего значения и «конец» выше вашего значения. Я ошибаюсь? – rubenfa

ответ

6

Здесь действительно применяются операторы $gte и $lte; Вам просто нужно использовать отдельные операторы для start и end:

ip = 2921648058; 
db.geoip.find({'start': {'$lte': ip}, 'end': {'$gte': ip}})