簡體   English   中英

Mongoose,文本搜索多個字段不起作用

[英]Mongoose, text search multiple fields not working

這是我的模型,

 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 中對其進行測試,但它不會為公司獲取任何數據,但會為名稱獲取數據

嘗試使用“$or”運算符:

//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. 從文檔中刪除當前索引(_id 除外)。
  2. 現在在您的模型上(我的是“事件”,模式名稱是“eventSchema”)添加索引如下:
eventSchema.index(title: 'text', description : 'text');

現在,此代碼將在 'title' 和 'description' 中搜索使用 params 給出的字符串:

const { search } = req.params;
const events = await Event.find({$text: {$search: `${search}`}});

您可以使用 MongooseJS 查找文本

let query= req.params.term;
Internet.find({name: { $regex: '.*' + query + '.*' } }).limit(10);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM