2016-09-19 49 views
-1

我試圖在節點JS我的名單上進行搜索和我下面的代碼進行的是,如何在Node.js的MongoDB中執行搜索

exports.searchlistbyfirstname = function (req, res) { 
    var params = req.params; 
    var record= db.collection('profile'); 
    record.find({ $text: { $search: params.id} }, (err, result) => { 
    if (err){ return console.log(err) 
    } 
     if(result){ 
      response = {status:'success',data:result}; 
     } else{ 
      response = {status:'fail'}; 
     } 
     res.send(response); 
    }); 

}; 

我試圖尋找firstname,我相信我錯了。

任何人都可以請幫我

+0

你在哪裏姓名查詢? – abdulbarik

+0

在那裏我很困惑,params.id具有我的名字值,我該如何編寫查詢? – klp

回答

2

搜索的firstName你可以試試這個query讓你firstname

record.find({ 
    firstname: { 
    $regex: params.id 
    } 
}, (err, result) => { 
    if (err) { 
    return console.log(err) 
    } 
    if (result) { 
    response = { 
     status: 'success', 
     data: result 
    }; 
    } else { 
    response = { 
     status: 'fail' 
    }; 
    } 
    res.send(response); 
}); 
+0

謝謝abdulbarik,它工作正常,$ regex用於什麼? – klp

+0

它爲查詢中的模式匹配字符串提供正則表達式功能。請參閱文檔https://docs.mongodb.com/manual/reference/operator/query/regex/ – abdulbarik

1

要執行文本搜索確保搜索字段首先,你必須創建的文本索引。

喜歡:

db.collection('profile').createIndex({ firstName: "text" }); 

,那麼你可以對提交的(一個或多個)執行文本搜索。

// params.id should be like "shaishab" 
// but better to use req.query.firstName instead of req.params.id 
// and you should change your route for that 
record.find({$text: {$search: params.id}}, (err, result) => { 
    if (err) { 
    console.log(err) 
    return res.status(400).send({status: 'fail', error: err}); 
    } 
    if (result) { 
    response = {status: 'success', data: result}; 
    } else { 
    response = {status: 'fail'}; 
    } 
    res.send(response); 
}); 

或者沒有創建文本索引可以通過使用$regex操作

record.find({firstName: { $regex: req.params.id, $options: 'i' } }, (err, result) => { 
     if (err) { 
     console.log(err) 
     return res.status(400).send({status: 'fail', error: err}); 
     } 
     if (result) { 
     response = {status: 'success', data: result}; 
     } else { 
     response = {status: 'fail'}; 
     } 
     res.send(response); 
    });