我正在使用节点js,mongoose,express和mongodb。
我创建了一个简单的表单,您在其中输入全名,并在数据库中搜索并返回您的其他详细信息。
是否可以仅使用整个名称中的几个单词进行搜索?例如如果用户想要搜索“abc xyz”,用户是否可以仅使用“abc”或“xyz”来执行相同操作
这是我原来的路线:
app.get("/",function(req,res){
var name = req.query.name;
details.findOne({fullname:name},function(err,foundAsked){
if(err){console.log("ERROR!!!");}
else{res.render("Details.ejs",{foundAsked:foundAsked,name:name}); }
});
});
是否可以这样做?如果是,那我该如何实现呢?
答案 0 :(得分:1)
是的,您可以使用正则表达式:
details.findOne({ fullname : /.*(?:abc|xyz).*/gi }, .....
答案 1 :(得分:1)
您可以使用正则表达式来部分匹配某些字段,如此
const query = {
fullname: {
$regex: req.query.name,
$options: 'i'
}
};
details.find(query, function(err, foundAsked){
...
})
查询中i
的位置使其不区分大小写。
在使用部分搜索的情况下,我建议不要使用findOne
,因为这可能会误导用户只返回一个结果,如果他/她打字让我们说{{1} }