如何在猫鼬中找到“按名字”

时间:2019-06-01 19:32:00

标签: javascript express mongoose

我正在尝试使用特定名称获取数据库值。我想把所有的书都写给作者。

这是我的代码,用于获取作者的,并使用Like运算符来搜索他在 BookDB 中写的所有书籍,如{{ 1}}

mysql

问题:如何将//get books by author name router.route('/authorName').get((req, res) => { let authorName = req.params.authorName; //how can i pass this value to below regex command BookDB.find({"firstName": /authorName/}, (err, books) => { if(err) throw err; res.status(200).send(books); }); }); 传递给{“ firstName”:/ authorName /} 。 我写的方式没有正确设置authorName

3 个答案:

答案 0 :(得分:0)

我不确定猫鼬部分,但是您也可以创建正则表达式为: 新的RegExp(exp:字符串,标志:字符串)

请注意,如果使用此格式,则开始斜杠和结束斜杠没有特殊含义,它们表示字符串以斜杠开头

答案 1 :(得分:0)

我做了一些研究,发现$regex

//get books by author name
router.route('/authorName').get((req, res) => {
    let authorName = req.params.authorName;
    BookDB.find({firstName: {$regex: `${authorName}`}}, (err, books) => {
        if(err) throw err;
        res.status(200).send(books);
    });
});

这将在authorName数据库中找到包含此特定字符串BookDB的所有结果

答案 2 :(得分:0)

router.get('/:authorName', async (req, res, next) => {
    await BookDB.find({"firstName": req.params.authorName}, (err, books) => {
        if(err){
            res.status(400).send('No books found written by this author');
        } else {
            res.status(200).send(books);
        }
    });
});

在路由网址中添加一个冒号,以将authorName转换为可通过req.params('/:authorName')获取的参数。

您可以在find函数中使用花括号内的任何变量。您不需要对变量做任何特殊的事情。尽管我可以将作者姓名转换为小写(const authorName = req.params.authorName.toLowerCase();),然后再将其存储在数据库中以及在查询中使用它们之前,这样用户不必考虑大写或小写字母

我在执行查询时使用异步(&await)函数,因此如果查询花费一些时间,主线程不会被阻塞。 mongodb获取数据时,主线程可以处理其他获取请求。