Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在mongodb中仅使用几个关键字进行搜索_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 在mongodb中仅使用几个关键字进行搜索

Javascript 在mongodb中仅使用几个关键字进行搜索,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我使用的是NodeJS、mongoose、express和mongodb 我创建了一个简单的表单,在其中输入您的全名,它会在数据库中搜索并返回您的其他详细信息 是否可以只使用全名中的几个单词进行搜索?e、 g.如果用户希望搜索“abc xyz”,用户是否可以仅使用“abc”或“xyz”进行搜索 这是我最初的路线: app.get("/",function(req,res){ var name = req.query.name; details.findOne({fullname:nam

我使用的是NodeJS、mongoose、express和mongodb

我创建了一个简单的表单,在其中输入您的全名,它会在数据库中搜索并返回您的其他详细信息

是否可以只使用全名中的几个单词进行搜索?e、 g.如果用户希望搜索“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}); }
  });
 }); 

可以这样做吗?如果可以,那么我如何实现它?

可以,您可以使用正则表达式:

details.findOne({ fullname : /.*(?:abc|xyz).*/gi }, .....

您可以使用正则表达式在某些字段上进行部分匹配,如

const query = {
    fullname: {
        $regex: req.query.name,
        $options: 'i'
    }
};

details.find(query, function(err, foundAsked){
  ...
})
其中查询中的
i
使其不区分大小写


在使用部分搜索的情况下,我建议不要使用
findOne
,因为如果用户键入(比如
a

),那么可能会误导用户只返回一个结果。据我所知,为了找到某个元素,您必须搜索该元素。但是,您可以做的一件事是在添加到db时创建另一个名为“昵称”或其他内容的元素,将查询设置为搜索名称或昵称。您可以查看Mongo的文本搜索功能,它工作正常。只是好奇,如果某人的名字相同,是否可以解决任何冲突?