2015-04-25 13 views
0

Я работаю на запрос БД в mongo где я должен запросить документ регулярными выражающее string поле (fieldToQuery).

структура данных подобна

{ 
    fieldToQuery : "4052577300", 
    someOtherField : "some value", 
    ... 
    ... 
} 

У меня есть значение, как "804052577300", с помощью которого я должен запросить вышеуказанный документ.

Как достичь того же, используя $ regex оператор?

Update:

мне нужно сделать, как концы с regex in mongo.

ответ

2

Вы могли бы сделать что-то вроде обратного регулярных выражений запроса, в котором вы создаете regex, используя значение fieldToQuery, а затем проверьте, что по вашему запросу значение:

var value = "804052577300";   
db.test.find({ 
    $where: "new RegExp(this.fieldToQuery + '$').test('" + value + "');" 
}); 

Оператор $where позволяет выполнять произвольный JavaScript для каждого документа в вашей коллекции; где - это текущий документ, и истинный результат выражения определяет, должен ли документ быть включен в результирующий набор.

Так что в этом случае новый RegExp построен для fieldToQuery поля каждого Дока с $ в конце, чтобы закрепить поиск до конца строки. Затем вызывается метод regex test для проверки соответствия строки value регулярному выражению.

Строка $where оценивается на стороне сервера, поэтому значение value должно оцениваться на стороне клиента путем непосредственного включения его значения в строку $where.

Обратите внимание, что запросы $where могут быть довольно медленными, поскольку они не могут использовать индексы.

+0

Спасибо за ваши усилия по этому поводу, обязательно попробуете и сообщит вам об этом. Будет здорово, если бы вы могли просто дать краткое объяснение. ** обновление **: красота, работал как очарование. – Beast

+0

до тех пор, пока я не понял «новый RegExp», я понял, что мы можем использовать поле непосредственно, увидев ваш «this.fieldToQuery», но после этого это немного запутывает. – Beast

+1

@Beast Нет проблем, я добавил еще несколько объяснений; надеюсь, это поможет. – JohnnyHK

1

Вы могли бы сделать что-то вроде этого:

db.collection.find({ fieldToQuery: /4052577300$/}) 

Узор регулярное выражение выше эквивалентно операции LIKE в SQL в:

select * from table where fieldToQuery like '%4052577300' => will return the document with the value "804052577300" 
+0

Значение, которое я назвал, будет динамической последовательностью с префиксом числа в полеToQuery. поэтому у меня может быть ** «804052577300» ** или ** «8804052577300» **. – Beast

Смежные вопросы