Получение 0 результатов при поиске в узле JS

#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. Спасибо за ваш ответ, это сработало для меня.