首页 > 解决方案 > Mongodb Nodejs 正则表达式搜索

问题描述

嘿,我正在制作一个作为部分搜索表单的网站。参考来自:https ://www.youtube.com/watch?v=ZC2aRON3fWw&t= 42s 但我不明白为什么它不起作用。我使用哈巴狗而不是 hbs。

这些是我的代码:

    app.get('/sonuc', function(req, res, next){
  var q = req.query.q;
  Article.find({
    title : {
      $regex: new RegExp(q)
    }
  }, {
    _id:0,
    __v:0
    }, function(err, data){
      res.render('sonuc', {data:data})
    }).limit(10);
  });
});

然后这是我的布局哈巴狗:

.ui-widget
      form.form-inline.my-2.my-lg-0
        input.form-control.mr-sm-2(type='text', onkeyup='showResults(this.value)', placeholder='Search',action='/article/'+sorgu, aria-label='Search')
        button.btn.btn-secondary.my-2.my-sm-0(type='submit')
        #search-results(style='width:60px;top:-1px;position:relative')

在这个布局哈巴狗中,我认为 onkeyup 问题不起作用。如何在该表单上实现该功能?

这是我的 main.js,它从数据库中获取查询并以 html 形式编写:

    var showResults = debounce(function(arg){
  var value = arg.trim();
  if(value == "" || value.length <= o){
    $("#search-results").fadOut();
    return;
  }else{
    $("#search-results").fadeIn();
  };
  var jqhr = $.get('/article/' + value, function(data){
  })
  .done(function(data){
    if(data.length == 0){
      $("search-resuts").append('<p classs="lead text-center mt-2">No Results</p>');
  }else{
    data.forEach(x => {
      $("search-resuts").append('<a href="#"><p class="m-2 lead"><img style="width:60px;" src="images/supreme1.jpg">' + x.title +'</p></a>');
    });
  }
  })
  .fail(function(err){
    console.log(err);
  })
}); 200;
function debounce(func, wait, immediate){
  var timeout;
  return function(){
    var context = this;
    args = arguments;
    var later = function(){
      timeout= null;
      if(!immediate)func.apply(context,args);
    };
    var callNow = immediate && !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
    if(callNow)func.apply(context,args);
    };
  };

我无法理解这些问题以及为什么它不起作用。总而言之,我想制作一个可以与 regex 和 mongodb 一起使用的搜索引擎。在我引用的我的文章的上面那个youtoube视频中显示的是部分内容。但真正的问题是,我无法理解函数 showResults 的代码块,也不知道如何将这些代码翻译到我的项目中。所以我正在等待你的帮助。我无法将视频上传到该网站,因此如果您可以给我您的 Facebook、instagram 或电子邮件帐户,我可以发送应该解决的问题。我需要你的帮助。我已经为我的学校制作这个项目很长时间了,但我无法继续前进。拜托我需要你的帮忙。我希望我能很好地表达自己,你的帮助会解决它。

标签: node.jsregexmongodbexpresspug

解决方案


是的,我知道了。我做了很多改变,而不是使用这个代码块。我 wathced:https ://www.youtube.com/watch?v=9_lKMTXVk64 我还记录了:使用 Mongodb 进行模糊搜索? 这两个文档对我帮助很大。因此,我的代码与这些文档中显示的代码几乎 90% 相同。这是我的 app.js :

app.get('/sonuc', function(req, res){
  if (req.query.search) {
    const regex = new RegExp(escapeRegex(req.query.search), 'gi');
    Article.find({ "title": regex }, function(err, articles) {
        if(err) {
            console.log(err);
        } else {
           res.render("index", { 
             articles: articles 
            });
        }
    });
  }
});

这是我的 index.pug 文件:

extends layout

block content
  body
    br 
    br
    br
    ul.list-group
      each article, i in articles
        li.list-group-item
          a(href="/article/" + article._id)= article.title

这是我的 layout.pug 文件(但我会考虑文本形式)

  form.form-inline.my-2.my-lg-0(action="/sonuc" method="GET")
    input.form-control.mr-sm-2(type='text', name,="search", onkeyup='showResults(this.value)', placeholder='Search',action='/article/'+sorgu, aria-label='Search')
    button.btn.btn-secondary.my-2.my-sm-0(type='submit')

请看: https ://github.com/nax3t/fuzzy-search

因为在我的解决方案中,我没有添加当我们找不到单词时应用的消息。或者当用户没有搜索到这样的词时。noMatch 查询。但是在我将它应用到我的项目之后,我会将它添加到这里。


推荐阅读