如何在express.js中使用“like”命令/“string”/l查询Mongoose数据库?

wz3gfoph  于 2022-11-13  发布在  Go
关注(0)|答案(2)|浏览(132)

我正在使用搜索查询Mongoose数据库,其中标题是URL中的“customTitle”。
如果我搜索所有项目(例如Article.find(err, foundArticles) =>),则搜索工作正常,但我得到的Article.find({title:/customTitle/i}, (err, foundArticles) => {查询响应为空
我想得到一个响应与所有项目,其中包含“customTitle”变量的任何记录。

app.route("/:customTitle")
.get(function(req, res){
  const customTitle = _.capitalize(req.params.customTitle);
  Article.find({title:/customTitle/i}, (err, foundArticles) => {
  if (!err){
    res.send(foundArticles);
    console.log(typeof customTitle +" ", customTitle);
    console.log(foundArticles);
  } else {
    res.send(err);
  }
});

有什么问题吗?谢谢。

kd3sttzy

kd3sttzy1#

您需要使用new RegExp创建正则表达式。您正在搜索文字字符串customTitle
例如:

const rx = new RegExp(customTitle, 'i')
query.find({title:rx})
sulc1iza

sulc1iza2#

我发现,我可以使用Mongoose的RegExp和JavaScript
有效的Mongoose RegExp:

app.route("/:customTitle")
  .get(function(req, res) {
    const customTitle = _.capitalize(req.params.customTitle);
    Article.find({ title: {$regex: customTitle, $options:'i'}}, (err, foundArticles) => {
      if (!err) {
        res.send(foundArticles);
      } else {
        res.send(err);
      }
  });

JavaScript正则表达式的工作原理:

app.route("/:customTitle")
    .get(function(req, res) {
      const customTitle = _.capitalize(req.params.customTitle);
      const rx = new RegExp(customTitle, 'i');
      Article.find({title:rx}, (err, foundArticles) => {
        if (!err) {
          res.send(foundArticles);
        } else {
          res.send(err);
        }
    });

相关问题