【问题标题】:Getting 0 result on search in Node JS在 Node JS 中搜索结果为 0
【发布时间】:2021-07-31 06:13:39
【问题描述】:

我创建了一个用于搜索的 Node JS API 并将一些数据存储在 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);
      });
  }

知道我在这里做错了什么吗?

【问题讨论】:

  • 如果您完全忽略空格怎么办? let regexexp = new RegExp(searchquery.split('').join('\\s*'),'i');?
  • 感谢您的回复,它可以工作,但是当我在 URL 中这样传递并将其转换为 ?s=fn03%20a 时,我的搜索 API 没有任何想法,就像它没有命中但它可以工作在邮递员中。
  • 不明白你的意思。在正则表达式中使用之前,请确保 searchquery 是文字文本,而不是编码的 URI 参数。

标签: node.js regex mongodb search find


【解决方案1】:

我建议将输入中的任何空格设为可选:

let regexexp = new RegExp(searchquery.split('').join('\\s*'),'i');

这里,

  • searchquery.split('') - 将 searchquery 拆分为单独的字符
  • .join('\\s*') - 用\s* 在每个之间加入拆分,这样如果searchquery 字符之间有任何空格,它们也可以匹配。

【讨论】:

  • 感谢您的回复,它对我有用。
猜你喜欢
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多