Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

MongoDB, поиск по регулярному выражению

#регулярные_выражения #nodejs #mongodb


Добрый день!
В документе есть поле size (строка) вида 134-140, 140-146 и тп. Делаю запрос

var s = "134";
var reg = new RegExp (`[${s}]`, "i");
collection.find({size:{$regex:reg}}).toArray(function(err, result){
                console.log(result);
});


По идее, должно вернуть все документы, где в поле size встречается цифры 134 (точнее
строка). Но возвращает абсолютно все документы. Что я делаю не так?

П.С. после многочисленных тестов я  определил, что возвращаются не все документы,
а только те, где встречается хотя бы один символ из регулярного выражения.  В данном
случае  134. Так, будто квадратных скобок нет.
Версия MongoDB-сервера 3.0, модуль версии 3.0
    


Ответы

Ответ 1



var reg = /134/; collection.find({ size: { $regex: reg, $options: 'i' } }) UPD: var s = "134"; var reg = ".*" + s ".*"; collection.find({ size: { $regex: reg, $options: 'i' } })

Ответ 2



Так как не ответили выше, в чём ошибка, дополню. У вас в регулярном выражении строка вида [123], то есть ищется любой из указаных в скобках символов. Вы это сами заметили: после многочисленных тестов я определил, что возвращаются не все документы, а только те, где встречается хотя бы один символ из регулярного выражения. В данном случае 134 А что вы ожидали от квадратных скобок? Так, будто квадратных скобок нет. Почитать об этом можно, например, вот тут или тут.

Комментариев нет:

Отправить комментарий