猫鼬,文本搜索多个字段不起作用

时间:2017-05-03 12:17:36

标签: node.js mongodb mongoose

这是我的模特,

 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中测试它,它不会为公司获取任何数据,但会获取名称的数据

3 个答案:

答案 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)

我遇到了完全相同的问题,我想搜索的两个字段是“标题”和“描述”。 所以应该采取的步骤是

  1. 从文档中删除当前索引(_id除外)。
  2. 现在在您的模型上(我的是“ event”,模式名称是“ eventSchema”)添加索引,如下所示:
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);