Запрос регулярного выражения Mongo для поля в списке встроенных объектов - PullRequest
1 голос
/ 24 июля 2011

У меня есть коллекция с такими записями

> db.company.findOne({companyId:1})
{
"_id" : ObjectId("4e22ff08eefdd839f60ab95f"),
"lastUpdate" : ISODate("2011-07-11T17:00:00Z"),
"errorCount" : 0,
"house" : 49,
"phones" : [
    {
        "cityCode" : "3852",
        "number" : "461423",
        "type" : "phone"
    },
    {
        "cityCode" : "3852",
        "number" : "461317",
        "type" : "phone"
    }
],
"houseAdd" : "",
"rubricsId" : [
    NumberLong(184108177),
    NumberLong(184108175)
],
"companyId" : NumberLong(1)
}

сейчас я пытаюсь найти все компании с номерами телефонов, начинающимися с 8-800. я пытаюсь найти свой запрос

db.company.find({"phones.number":/8-800.*/}

и получите пустой список. Но

db.company.find({"phones.number":/8.*/})

вернуть все компании, номера телефонов которых начинаются с восьми. AFAIK '-' не является специальным символом для регулярного выражения в этом контексте? Я пробую регулярное выражение '8 \ -800' с тем же результатом. Где я не прав?

Ответы [ 2 ]

2 голосов
/ 24 июля 2011

Возможно, у вас есть какой-то забавный Юникод в ваших данных, просто потому, что он выглядит как дефис, не означает, что это дефис.Вы можете попробовать найти нужную запись с помощью findOne, а затем запустить данные через шестнадцатеричный дампер, чтобы увидеть, действительно ли это простой ASCII-дефис или какой-то Unicode-объект, который выглядит как дефис.Если дело обстоит именно так, тогда ослабьте ваш шаблон поиска до значения, подобного /^8\W+800/, и настраивайте его, пока он не найдет именно то, что вы ищете.хитрый Unicode:

Строка не равна себе

1 голос
/ 24 июля 2011

Другое возможное решение:

/^\D*8\D*800/
  • ^ убедитесь, что это в начале строки
  • \D* любое количество недесятичных символов, совпадает с тем, что вы получили от 8 до 800 (кроме цифр).

Первый \D* может не понадобиться, если вы знаете, что все эти строки начинаются с цифр, а не с чего-либо еще.

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