首页 > 解决方案 > 如何使用nodejs查询mongodb以进行不区分大小写的搜索/包含子字符串搜索的字符串

问题描述

所以我想在我的数据库中搜索一个职位。但是,只有在确切的字符串匹配时才有效,我希望搜索不区分大小写,并且如果 ti 包含一些搜索查询,则可以在数据库中找到该字符串。

我环顾四周,看到正则表达式可能适用于大小写问题,但我不确定如何用我已有的实现它。

Jobs.route

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

let query = {}; 

let tmp = req.query;


if (tmp && tmp != undefined && 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;

标签: node.jsmongodbapi

解决方案


首先,您必须向集合中添加一个索引 ($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.query -> "{ $text: { $search: "Developer" } }";

这将帮助您获得具有匹配标题的文档,例如 ->

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

推荐阅读