Regex работает в командной строке mongodb, но не с mongoose - PullRequest
0 голосов
/ 25 мая 2018

У меня есть схема с именем Skills, в которой есть одно строковое поле с именем name.Я хочу выполнить поиск по полю на основе заданной строки.Для нормальных строк, таких как java, работает нормально.Но для C++ исключение части ++ как + является специальным символом в регулярном выражении.Поэтому я заменил + на \\+, который прекрасно работает в mongodb.Для этого мой запрос в командной строке mongodb дает требуемый результат:

db.skills.find({"name": {'$regex': '^c\\+\\+', '$options': 'i'}})

Ниже приведен мой код с mongoose:

    word = '^' + req.query.word;
    word = word.replace(/\+/g, '\\+')
    word = word.replace(/\./g, '\\+')
    Skill.find({"name": {'$regex': word, '$options': 'i'}}).limit(10).exec(function (err, results) {
        res.json({'results': results})
    })

Здесь я добавил два оператора замены, чтобы заменить + на \\+ и . на \\.

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

Спасибо,

1 Ответ

0 голосов
/ 25 мая 2018
let word = "c++";

Skill.find({ "name": RegExp("^" + word.replace(/\+/g,"\\+"),"i") })

или

Skill.find({ "name": { "$regex": "^" + word.replace(/\+/g,"\\+"), "$options": "i" } })

Оба возвращают документ без проблем

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