#регулярные_выражения #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 А что вы ожидали от квадратных скобок? Так, будто квадратных скобок нет. Почитать об этом можно, например, вот тут или тут.
Комментариев нет:
Отправить комментарий