MongoDB 多条件查询

发布于 2022-09-04 02:30:32 字数 917 浏览 11 评论 0

有这样一个需求:根据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"});

请各位高手赐教!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长不大的小祸害 2022-09-11 02:30:32

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

陪你到最终 2022-09-11 02:30:32

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

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});
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文