Поиск в mongodb по нескольким ключевым словам

1

Я использую узел js, mongoose, express и mongodb.

Я создал простую форму, в которой вы вводите полное имя, и он ищет в базе данных и возвращает другие данные.

Можно ли искать только несколько слов из всего имени? например, если пользователь хочет выполнить поиск "abc xyz", пользователь может сделать то же самое, что и "abc" или "xyz",

это мой первоначальный маршрут:

app.get("/",function(req,res){

  var name = req.query.name;
  details.findOne({fullname:name},function(err,foundAsked){
      if(err){console.log("ERROR!!!");}
      else{res.render("Details.ejs",{foundAsked:foundAsked,name:name}); }
  });
 }); 

Можно ли это сделать? Если да, то как я могу это реализовать?

  • 0
    Насколько я знаю, чтобы найти элемент, нужно искать именно этот элемент. Однако, одну вещь, которую вы могли бы сделать, это создать другой элемент при добавлении в базу данных с именем «псевдоним» или что-то в этом роде, настроить запрос для поиска по имени или псевдониму.
  • 0
    Вы можете взглянуть на возможности текстового поиска Монго здесь
Теги:
express
mongoose

2 ответа

1
Лучший ответ

Вы можете использовать регулярное выражение для частичного совпадения в определенных полях

const query = {
    fullname: {
        $regex: req.query.name,
        $options: 'i'
    }
};

details.find(query, function(err, foundAsked){
  ...
})

Где i в запросе делает регистр нечувствительным к регистру.

В случае использования частичного поиска, я не рекомендовал бы использовать findOne, поскольку это может ввести в заблуждение пользователю возвращать только один результат, если он/она типа скажем A

  • 0
    это работает отлично. Просто любопытно, можно ли разрешить любое столкновение, если у кого-то такое же имя?
1

Да, для этого можно использовать регулярные выражения:

details.findOne({ fullname : /.*(?:abc|xyz).*/gi }, .....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню