我正在尝试使用特定名称获取数据库值。我想把所有的书都写给作者。
这是我的代码,用于获取作者的名,并使用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
。
答案 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获取数据时,主线程可以处理其他获取请求。