有这样一个需求:根据URL中的query参数,来判断应该包含哪些查询条件。
使用场景
var _q = req.query;
// 当URL为 http://api.abc.com/group/filter?s=2
group.find({status:_q['s']});
// 当URL为 http://api.abc.com/group/filter?t=1&s=2
group.find({type:_q['t'],status:_q['s']});
请问find()
如何书写,才能满足查询条件?
我当前的做法
var _q = req.query, _qParams = [];
if(_q.hasOwnProperty("t")){
_qParams.push({"type":_q["t"]});
}
if(_q.hasOwnProperty("s")){
_qParams.push({"status":_q["s"]});
}
groups.find({$or:_qParams},{},{sort:{_id:-1},limit:50}).exec(function (err, data) {
if(!data || data.length == 0){
res.json({code: 404, msg: "Empty"});
}else{
res.json({code: 0, msg: "success", data: data, count: data.length});
}
});
但是执行了这条语句
res.json({code: 404, msg: "Empty"});
请各位高手赐教!
巴扎黑2017-04-17 15:19:01
執行的這條語句說明,沒有找到結果,你印下err,看是不是報錯了,然後確定下資料庫裡面記錄是不是存在
另外就是你下面程式碼的查詢條件跟你上面說的不一樣,下面程式碼用的是$or查詢,上面說的應該是and查詢
var _q = req.query, _qParams = [];
if(_q.hasOwnProperty("t")){
_qParams.type = _q["t"];
}
if(_q.hasOwnProperty("s")){
_qParams.status=_q["s"];
}
groups.find(_qParams,null,{sort:{_id:-1},limit:50}).exec(function (err, data) {
if(!data || data.length == 0){
res.json({code: 404, msg: "Empty"});
}else{
res.json({code: 0, msg: "success", data: data, count: data.length});
}
});
groups.find({$or:_qParams},{},{sort:{_id:-1},limit:50});
還有一個地方查詢,第二個字段,如果返回全部字段,傳遞null,不是{}
大家讲道理2017-04-17 15:19:01
@姜立 我修改了下,即使不存在數據,卻還是回傳了所有記錄。
var _q = req.query, _qParams = [];
if(_q.hasOwnProperty("t")){
_qParams.push({type:parseInt(_q["t"])});
}
if(_q.hasOwnProperty("s")){
_qParams.push({status:parseInt(_q["s"])});
}
groups.find(_qParams,null,{sort:{_id:-1},limit:50},function(err, data){
if(!data || data.length == 0){
res.json({code: 404, msg: "Empty"});
}else{
res.json({code: 0, msg: "Success", data: data, count: data.length});
}
});