Монго БД найти запрос с Regex не возвращает ожидаемый результат - PullRequest
0 голосов
/ 06 июня 2019

Ниже мой запрос, который возвращает результат из базы данных.Я использую версию 3.2.22 mongo

db.courses.find({_id:"edX-NYIF+CR.5x"});

Теперь я хочу получить запись с идентификатором курса, который будет в нижнем регистре, поэтому я использовал запрос ниже, кажется, работает нормально, если я использую символ альфа, но не получаю результат дляследующий курс Id.

db.getCollection('courses').find({"_Id": { $regex : "edX-NYIF+CR.5x$" , $options: 'i'}})

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Строка выражения Regex должна быть экранирована

db.getCollection('courses').find({"courseId": { $regex : "edX\\-NYIF\\+CR\\.5x$" , $options: 'i'}})

MongoPlayground

0 голосов
/ 06 июня 2019

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

Строка "edX-NYIF+CR.5x" содержит символыкоторые имеют определенные значения для регулярных выражений, такие как . и +, и, возможно, некоторые другие идентификаторы содержат другие.Сначала вы должны их избежать.

Глядя на другой вопрос SO , есть простой способ избежать символов, чувствительных к регулярному выражению:

string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')

Так что избегайте строки идентификатора изатем используйте его в своем запросе.

Вот удобная ссылка для специальных символов внутри регулярных выражений, если вам это нужно.

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