2016-11-27 42 views
0

我有一個表單,用戶可以選擇通過指定買方名稱或項目名稱或兩個搜索交易..所以我可以有任何這些查詢:如何根據我的查詢參數在貓鼬中搜索?

本地主機:8000/allPayments/I =麪食
本地主機:8000/allPayments/b =優素福
本地主機:8000/allPayments/b =優素福& I =麪食

在下面的代碼貓鼬總是會爲他們兩個

router.get('/allPayments', function (req, res, next) { 
Transaction.find({'buyerName':req.query.b , 'itemName':req.query.i}) 
          .then(function (docsPay) { 
           res.render('allPayments', { 
            payments: docsPay 
        }); 
}); 

如何告訴貓鼬只查找在查詢中傳遞的內容而不寫上述代碼3次不同? 例如:如果查詢是第二個,則只查找({'buyerName':req.query.b})

回答

0

您可以先根據條件創建查詢對象&然後使用該查詢對象。 Like:

var query = {}; 
var isParamPresent = false; 

if(req.query.b != undefined && req.query.i != undefined){ 
query['buyerName'] = req.query.b; 
query['itemName'] = req.query.i; 
isParamPresent = true; 

} 
else if (req.query.b != undefined && req.query.i == undefined){ 
query['buyerName'] = req.query.b; 
isParamPresent = true;  
} 
else if (req.query.b == undefined && req.query.i != undefined){ 
query['itemName'] = req.query.i; 
isParamPresent = true; 
} 
else{ 
isParamPresent = false; 
// both are undefined, your logic 
} 

if(isParamPresent){ 

Transaction.find(query).then(function (docsPay) { 
           res.render('allPayments', { 
            payments: docsPay }); 
//Further logic 
}