在带有变量的node.js应用程序中进行正则表达式Mongo搜索

时间:2018-03-13 10:09:09

标签: javascript node.js regex mongodb mongoose

我的应用的基本功能:客户开始在输入字段中输入电子邮件地址,并接收与他们输入的字符相匹配的自动建议结果。

我已尝试在我的节点应用程序中在Mongoose / Mongo中实现此功能,如下所示:

let customer = await Customer.find({
   'email_address': {
     $regex: searchQuery
   }
 })

重要的是要注意我实际上为email_address设置了一个索引,以提高性能,但我在某处读到使用regex将无效搜索索引?我阅读了关于此的文档但我更加困惑。无论如何,问题的主要症结如下:

我知道通过执行/^exampleEmailAddress/之类的操作,它会匹配以查询开头的结果(不是通配符搜索)。这就是我要的。

但是,如果exampleEmailAddress是我从req.query获得的变量,我该怎么办呢?我试过了:

let customer = await Customer.find({
  'email_address': {
    $regex: /^`${searchQuery}`/
  }
})

哪个不行。我觉得我在这里缺少一些基本的东西......

2 个答案:

答案 0 :(得分:3)

您可以使用课程RegExp

const customer = await Customer.find({
  email_address: {
    $regex: new RegExp(`^${searchQuery}`),
  },
});

答案 1 :(得分:2)

您可以对文档中的特定属性使用Regex表达式。您可以使用上面提到的i

来搜索不区分大小写
customer.find({ "email_address": new RegExp(searchQuery, 'i') }, function (err, task) {
if (err)
  res.send(err);
 res.json(task);
 }); 

请注意。 reqres可能是您的请求和响应对象