mongodb 在全文搜索期间使用节点 js 返回 [] 作为响应

Posted

技术标签:

【中文标题】mongodb 在全文搜索期间使用节点 js 返回 [] 作为响应【英文标题】:mongodb using node js returning [ ] in response during a full text search 【发布时间】:2019-05-02 09:11:03 【问题描述】:

我正在使用带有节点 js 的 mongo 并且想要获取数据以进行全文搜索。但目前得到一个空数组[] 作为回报。

我的 API 请求如下 -

router.post('/products/search', function(req, res, next)  
    var search=req.body.search;
    console.log(search)
    Product.find($text:$search:search,function(err,data)
    
        console.log(data)
        res.send(data)  
    );
);

而数据库代码如下-

var ProductSchema = new Schema(
    category: String,
    name: String,
    price: Number,
    cover: String,
    search:String
)

请帮我获取数据。

【问题讨论】:

您是否正确添加了索引? yes[ "_id": "5bfe79422005130af1da85e8", "category": "服装", "name": "华丽的橡胶键盘", "price": 50, "cover": "@987654321 @", "__v": 0 ] JonhnyHK 在这里的回答 ***.com/questions/28775051/… 应该有助于为您指明正确的方向。 【参考方案1】:

尝试搜索如下。

db.products.createIndex(  search: "text"  )

router.post('/products/search', (req, res, next) =>  
    const search = req.body.search;
    Product.find( $text:  $search: search  ).then(data => 
        console.log(data)
        res.json(data)  
    ).catch(err => 
        res.status(400).json(err.message)
    );
);

如果您想使用正则表达式进行搜索。

router.post('/products/search', (req, res, next) =>  
    const search = new Regex(req.body.search, i);
    Product.find(
        $or [
            category: search, 
            name: search, 
            cover: search,
            price: search, 
            search: search
        ]
    ).then(data => 
        console.log(data)
        res.json(data)  
    ).catch(err => 
        res.status(400).json(err.message)
    );
);

或者如果您只想在搜索字段中搜索

router.post('/products/search', (req, res, next) =>  
    const search = new Regex(req.body.search, i);
    Product.find(search: search).then(data => 
        console.log(data)
        res.json(data)  
    ).catch(err => 
        res.status(400).json(err.message)
    );
);

【讨论】:

【参考方案2】:

使用正则表达式搜索这种方式,它的工作原理。

const searchText= "mail";
await EmailModel.find(
      $or: [text: $regex: searchText, subject: $regex: searchText, from: $regex: searchText]
    )

看看这个link

【讨论】:

【参考方案3】:

您还需要创建文本模式才能使其工作。 在你的情况下:

ProductSchema .index(   
    category: 'text',
    name: 'text, 
);

【讨论】:

我按照你说的做了。但是,问题仍然存在。你能检查一下这是否适用于你吗?

以上是关于mongodb 在全文搜索期间使用节点 js 返回 [] 作为响应的主要内容,如果未能解决你的问题,请参考以下文章

使用节点 js 搜索字符串 mongodb 中的任何单词

mongodb 在查询期间如何处理文档

如何在节点 js 和 mongodb 中使用填充的字段键值名称进行搜索?

MongoDB 设置的全文搜索选项

确切的短语在 mongodb 全文搜索中无法正常工作

MongoDB全文搜索和查找运算符