mongodb使用节点js在全文搜索过程中返回[]作为响应

时间:2018-11-30 08:16:08

标签: javascript node.js mongodb

我正在将mongo与node js结合使用,并希望获取用于全文本搜索的数据。但是目前返回的是一个空数组[]

我的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
})

请帮助我获取数据。

3 个答案:

答案 0 :(得分:0)

尝试如下搜索。

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)
    });
});

答案 1 :(得分:0)

使用正则表达式进行搜索这样就可以了。

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

看看link

答案 2 :(得分:-1)

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

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