Как использовать сопоставление с номерами, используя node.js и MongoDB - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть несколько документов в коллекции в MongoDB, как показано в этом снимке . Я создаю веб-приложение, для которого это внутренние данные.

Каждый документ имеет атрибут name. У пользователя есть возможность поиска name во внешнем интерфейсе. Теперь предположим, что пользователь ищет «Сэм», а затем я возвращаю документы, где name либо «Сэм», либо начинается с «Сэм». Я реализовал это, используя следующий код:

let name = "^"+req.body.name;
const name_regex = new RegExp(name, 'gi');

try {
  let members = await Member.find({ name: req.body.name=="" ? /^$|/ : name_regex});
  res.send(members);
}

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

Итак, если пользователь ищет «Сэм», на выходе получаются все 3 документа, поскольку все они имеют name, начиная с «Сэма», но если пользователь ищет «Сэмм», то возвращается только один документ, где name «Сэмми».

Теперь я хочу реализовать тот же атрибут logi c для age, т. Е. Если пользователь ищет возраст: 2, то я хочу вернуть все документы, для которых указан возраст. ровно 2 или начинается с di git 2. Но я не могу использовать вышеописанный метод, так как он работает только со строками.

Примечание: я использую пакет mon goose и Express рамки.

1 Ответ

0 голосов
/ 04 февраля 2020

Вы можете сделать это:

// regular expression matching anything that starts with two 
const age_regex = /^2/; 

Member.find({
  $expr: {
    $regexMatch: {
      input: {
        $toString: "$age" // Casting the age value to a string
      },
      regex: age_regex
    }
  }
})

Некоторые полезные пояснительные ссылки: $ expr , $ regexMatch , $ toString

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...