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 }