Базовые функции моего приложения: клиенты начинают вводить адрес электронной почты в поле ввода и получать автоматически предлагаемые результаты, соответствующие введенным ими символам.

Я пробовал реализовать это в 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}`/
  }
})

Который не работает. Я чувствую, что мне здесь не хватает чего-то элементарного ...

1
Modermo 13 Мар 2018 в 13:09

2 ответа

Лучший ответ

Вы можете использовать класс RegExp

const customer = await Customer.find({
  email_address: {
    $regex: new RegExp(`^${searchQuery}`),
  },
});
3
Grégory NEUT 13 Мар 2018 в 10:12

Вы можете использовать выражение Regex для этого конкретного свойства в своих документах. И вы можете искать нечувствительность к регистру, используя i, как упоминалось

customer.find({ "email_address": new RegExp(searchQuery, 'i') }, function (err, task) {
if (err)
  res.send(err);
 res.json(task);
 }); 

Заметка. req и res могут быть вашими объектами запроса и ответа

2
George Bailey 13 Мар 2018 в 10:15