Как запросить mongodb с помощью nodejs для поиска без учета регистра / строки, содержащей поиск по подстроке

#node.js #mongodb #api

#node.js #mongodb #API

Вопрос:

итак, я хочу выполнить поиск в моей базе данных по названию задания. Однако это работает, только если точная строка совпадает, я бы хотел, чтобы поиск не учитывал регистр, а также находил строку в базе данных, если ti содержит часть поискового запроса.

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

Jobs.route

 router.get("/search", async (req, res) => {

let query = {}; 

let tmp = req.query;


if (tmp amp;amp; tmp != undefined amp;amp; Object.keys(tmp).length != 0) {
    query = tmp;
}   

let jobs = await Job.find(query)
    .sort({ createdAt: -1 }); 

if (!jobs) {
    return res.status(400).send({
        message: `Encountered an error when getting job with title ${req.query.title}.`,
        ok: false,
        errors: [error],
        jobs: {}
    });
} else {
    return res.send({
        total_items: jobs.length,
        message: `Returned all jobs with title ${req.query.title} successfully`,
        ok: true,
        errors: [],
        jobs: jobs
    });
}
});

module.exports = router;
  

Комментарии:

1. Пожалуйста, предоставьте req.query

Ответ №1:

Сначала вам нужно будет добавить индекс ($text) в коллекцию.

См . : https://docs.mongodb.com/manual/reference/operator/query/text /

 db.articles.createIndex( { subject: "text" } )
  

После завершения обновите запрос до

 Jobs.find({ $text: { $search: "Developer" } }) //Software being the Job Title
  

В текущем коде: req.запрос -> «{ $text: { $search: «Разработчик» } }»;

Это поможет вам получить документы с соответствующими названиями, такими как ->

 [ "SOFTWARE DEVELOPER", "Software Developer", "software developer" , "SoftWare DeveLoPer" , "BackEnd Developer" , "Developer In Test" ....]