这是我的模特,
var InternetSchema = new Schema({
name: String,
company: String,
contactNumber:String,
accessToken:String,
});
InternetSchema.index({name: 'text', company: 'text');
export default mongoose.model('Internet', InternetSchema);
这是我的功能,它响应搜索API
export function getSearchAccess(req, res) {
// const arr = [
// {name: req.params.term},
// {company: req.params.term}
// ]
console.log(req.params.term)
Internet.find({
$text: {
$search: req.params.term
}
}).limit(10).exec(function(finderr, finddata) {
return res.json({ count: 10, data: finddata });
});
}
但是,这似乎只能获取与name
字段匹配的文档。它与company
字段不匹配。
我已经尝试在mongo shell中测试它,它不会为公司获取任何数据,但会获取名称的数据
答案 0 :(得分:1)
尝试使用' $或'操作者:
//examples from my app
//User.js
..
userSchema.index({login: 'text', fullname: 'text', email: 'text'}, {default_language: 'none'});
//query examples:
User.find({"$or": [ { "fullname" : { $search: criteria }}, { "email" : { $search: criteria }}, { "login" : { $search: criteria }}]});
//or regexp
User.find({"$or": [ { "fullname" : { $regex: criteria }}, { "email" : { $regex: criteria }}, { "login" : { $regex: criteria }}]});
答案 1 :(得分:0)
我遇到了完全相同的问题,我想搜索的两个字段是“标题”和“描述”。 所以应该采取的步骤是
eventSchema.index(title: 'text', description : 'text');
现在,此代码将在'title'和'description'中搜索使用params给出的字符串:
const { search } = req.params;
const events = await Event.find({$text: {$search: `${search}`}});
答案 2 :(得分:0)
您可以使用MongooseJS查找文本
let query= req.params.term;
Internet.find({name: { $regex: '.*' + query + '.*' } }).limit(10);