2016-11-27 68 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 
}