Частичный текстовый поиск (поиск) не работает в моем экспресс-приложении - PullRequest
1 голос
/ 11 октября 2019

В настоящее время у меня есть следующий маршрут для текстового поиска.

router.post("/visit", middleware.isLoggedin, function(req,res){
    subject.find({Subject_Name: req.body.user} ).sort('Visit_date').exec(function(err,returnedsubjects){
        if(err){
            console.log(err);
        } else {
            console.log(returnedsubjects);
            res.render("visit",{returnedsubjects: returnedsubjects);
        }
    });
});

Работает нормально. Но, как вы можете видеть, имя_субъекта должно точно соответствовать. Мне нужно "Дэвид" или "Дэвид", чтобы найти коллекции, где Subject_Name = "Дэвид Уорнер", например.

Попробовал это предложение. Как запросить MongoDB с «лайком»? . Не сработало.

Пробовал это subject.find({Subject_Name: /req.body.user/} ) и это subject.find({"Subject_Name": /req.body.user/} )

не повезло: (.

Любая помощь приветствуется. Спасибо!

1 Ответ

2 голосов
/ 11 октября 2019

Создайте текстовый индекс в поле Subject_Name нашего документа, используя следующий запрос:

subject.index({Subject_Name:"text"})

, тогда вы можете выполнять поиск с использованием $ text и $ search следующим образом:

 var text = req.body.user;
    subject.find({ $text:{$search: text} });

Допустим, вы создали следующую схему:

  var subjectschema = new mongoose.Schema({ Subject_Name: { type: String, index: true },etc)}

вам нужно создать индекс в файле схемы, чтобы ваш файл схемы выглядел следующим образом:

     var subjectschema = new mongoose.Schema({ 
     Subject_Name: { type: String, index: true },
     etc
     )};

    subjectschema.index({Subject_Name:"text"};

, затем запуститепоиск по маршруту:

 subjectschema.find( {$text:{$search: req.body.user} }).then(result=>{
        if (result)
        {
           //do something with your code
            console.log(result);
        }

    })

Так что теперь, если мы ищем «david», вышеприведенный запрос возвращает следующие документы, содержащие ключевое слово «david» в их поле Subject_Name.

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