目前,我有以下几种文本搜索途径。
router.post("/visit", middleware.isLoggedin, function(req,res){
subject.find({Subject_Name: req.body.user} ).sort('Visit_date').exec(function(err,returnedsubjects){
if(err){
console.log(err);
} else {
console.log(returnedsubjects);
res.render("visit",{returnedsubjects: returnedsubjects);
}
});
});
它工作正常。但是如您所见,subject_name必须完全匹配。我需要“ david”或“ David”来找到例如Subject_Name =“ David Warner”的集合。
尝试了这个建议。如何用“ like”查询MongoDB?。不工作。
尝试了subject.find({Subject_Name: /req.body.user/} )
这个subject.find({"Subject_Name": /req.body.user/} )
没有运气 :(。
任何帮助表示赞赏。谢谢!
使用以下查询在文档的Subject_Name字段上创建文本索引:
subject.index({Subject_Name:"text"})
那么您可以使用$ text和$ search这样进行搜索:
var text = req.body.user;
subject.find({ $text:{$search: text} });
假设您已创建以下架构:
var subjectschema = new mongoose.Schema({ Subject_Name: { type: String, index: true },etc)}
您必须在模式的文件中创建索引,以便您的模式文件如下所示:
var subjectschema = new mongoose.Schema({
Subject_Name: { type: String, index: true },
etc
)};
subjectschema.index({Subject_Name:"text"};
然后开始搜索路线:
subjectschema.find( {$text:{$search: req.body.user} }).then(result=>{
if (result)
{
//do something with your code
console.log(result);
}
})
因此,现在如果我们要搜索“ david”,上面的查询将返回以下文档,这些文档的Subject_Name字段中包含关键字“ david”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句