#node.js #regex #mongodb #search #find
Вопрос:
Я создал API JS узла для поиска и сохранил некоторые данные в MongoDB. Мои данные хранятся как пример:
FN02 ROL
FN02 ROM
FN02 RON
FN02 ROO
FN02 ROS
FN02 ROT
FN02 ROV
FN02 ROW
FN02 ROX
FN02 ROY
Поэтому, когда я ищу с помощью fn02, это работает хорошо, но когда я добавляю еще один параметр, такой как fno2r, он не работает, я думаю, что это будет из-за пробела, но не уверен, поэтому я обрезаю это пространство, но все равно это не работает.
Мой код поиска-searchquery-это мои данные поиска
let regexexp = new RegExp(searchquery,'i');
s = {"name": regexexp};
function callback(totalcount){
db.collection("customers").find(s).limit(16).toArray(function(err, res) {
if (err) throw err;
responsedata = { status: true,error : false,data : res };
resolve(responsedata);
});
}
Есть идеи, что я здесь делаю не так ?
Комментарии:
1. Что делать, если вы вообще игнорируете пробелы?
let regexexp = new RegExp(searchquery.split('').join('\s*'),'i');
?2. Спасибо за ваш ответ, это работает, но когда я передаю вот так в URL, и он преобразует его в ?s=fn03 a, тогда мой поисковый API не работает, как будто он не работает, но он работает в Postman .
3. Понятия не имею, что ты имеешь в виду. Убедитесь
searchquery
, что это буквальный текст, а не закодированный параметр URI, прежде чем использовать его в регулярном выражении.
Ответ №1:
Я бы предложил сделать любые пробелы во входных данных необязательными:
let regexexp = new RegExp(searchquery.split('').join('\s*'),'i');
Здесь,
searchquery.split('')
— разбиваетsearchquery
на отдельные символы.join('\s*')
— соединяет разделители обратно сs*
промежутками между ними, чтобы, если междуsearchquery
символами есть пробелы, они тоже могли быть сопоставлены.
Комментарии:
1. Спасибо за ваш ответ, это сработало для меня.