node.js - MongoDB 多条件查询

浏览:24日期:2022-10-03

问题描述

有这样一个需求:根据URL中的query参数,来判断应该包含哪些查询条件。

使用场景

var _q = req.query;// 当URL为 http://api.abc.com/group/filter?s=2group.find({status:_q[’s’]});// 当URL为 http://api.abc.com/group/filter?t=1&s=2group.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'});

请各位高手赐教!

问题解答

回答1:

执行的这条语句说明,没有找到结果,你打印下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,不是{}

回答2:

@姜立 我修改了下,即使不存在数据,却还是返回了所有记录。

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

相关文章: