Express js Mongoose替代MySQL%通配符

我一直在阅读,并尝试了其他人已经成功的几个不同的代码片段,但我似乎无法得到它的工作。

我想要的是用户只能使用部分术语进行search,即pe为'peter'。 我想在search字词上使用通配符。

我的代码到目前为止,这是行不通的:

router.get('/:callsign', function(req,res){ var search = req.params.callsign; var term = escape(search); term = term.toUpperCase(); if(search=="*" || search==""){ res.redirect("/"); } User.find({'callsign' : new RegExp('^'+term+'$', "i") }, function(err, callsign){ if(err) { console.log('No user found'+err); req.flash('message','Sorry, something went wrong. Try again.'); res.render('callSearchResults'),{ message: req.flash('message'), title: 'Sorry, no results' } } if(callsign){ console.log('Callsign:'+callsign+term); res.render('callSearchResults',{ call: callsign, title: 'You searched for '+search, query: term }); }else{ console.log('No entries found'+search); } }); }); 

此外,“呼号”callback也是如此,即使没有结果!

您正在使用RegExp进行此search。 字面意思是模式必须在string的起始处,而$在结尾处。 如果你只想匹配部分,你不需要添加它们,所以下面的例子:

 new RegExp(term, "i") 

另外还有一个很好的全文search机制mongo。 你可以从官方文档中了解它们。

关于mongoose中的查询,当有对象和检查callback。 返回的对象是文件数组,而在JS中,空数组被转换为true语句。 相反,请检查长度数组,如下所示:

 if(callsign.length > 0) { // Logic } else { // Nothing found }