Создать этот LEFT () "SQL" в MongoDB Query? - PullRequest
1 голос
/ 14 июля 2011

Иметь коллекцию BsonDocument с PhoneNumber в формате "1234567890". Этот SQL получает все номера телефонов с кодами зоны от 300 до 399;

WHERE (LEFT(PhoneNumber,3) BETWEEN '300' AND '399') 

Как бы я сделал это в MongoDB? Я хотел бы использовать MongoDB.Driver.Builders, если это возможно.

Ответы [ 3 ]

4 голосов
/ 14 июля 2011

Если вы просто хотите, чтобы номер телефона начинался с номера '3', вы можете просто использовать умное решение @ mstearn , здесь просто реализация c #:

var query = Query.EQ("PhoneNumber", new BsonRegularExpression("^3"));

Но, скажем, еслиВам нужно запросить первые 3 цифры в диапазоне 345 - 369, чтобы заставить его работать (без медленных операторов: $where, $regex), вы можете создать дополнительное поле и сохранить там первые 3 цифры (код города) телефона.А затем используйте запрос, предложенный @ yi _H, и здесь реализация драйвера c #:

var query = Query.GTE("PhoneAreaCode", 345).LTE(369);

Не волнует поле extra в mongodb - это часто встречаетсяпрактика.Дополнительные поля обычно работают быстрее, чем любые вычисления во время запроса.

1 голос
/ 14 июля 2011
{'PhoneNumber': /^3/ } or {'PhoneNumber': {'$regex': '^3'}}
1 голос
/ 14 июля 2011
{'PhoneNumber': {'$gte': '300', '$lt': '400'}}
...