查找没有键值的数据

时间:2016-05-03 16:39:02

标签: node.js mongodb express mongoose

所以我想使用mongoose .find()函数在我的数据库中搜索项目。 在我的路由器中,我有这段代码从网址获取某些项目。 例如;

mydomainname.com/market?type=1&name=hi&stats=123 ...?type=123&name=&...

var type = req.query.type;
var name= req.query.name;
var stats= req.query.stats;
Model.find({type: type, name: name, stats: stats})
                .exec(function(err, model){
                    if(err){
                        console.log("error")
                    }else{
                        res.render('*jade*', {models: JSON.stringify(model)})
                    }})

这样可以正常工作,但当网址中没有查询值时(如上所示),查询值将设置为''。然后将我在数据库中的每个项目分类,因为没有exmaple name = '';

我有搜索但我没有找到任何帮助,所以如果有任何可以给我小费我会很感激!

2 个答案:

答案 0 :(得分:0)

您可以根据请求查询参数的值创建find()查询对象。以下示例检查name字段是否具有空字符串值,从查询中删除该属性,然后将最终查询对象用作find()过滤器:

var q = req.query;
if (q.name === '') {
    delete q.name;
}

// carry out further checks 

Model.find(q)
     .exec(function(err, model){
        if(err){
            console.log("error");
        }else{
            res.render('*jade*', {models: JSON.stringify(model)});
        }
    })

答案 1 :(得分:0)

Try this



   var q = req.query;
    var data ={};
    if (q.name !=null) {
        data.name = q.name;
    }
    else if (q.type !=null){
        data.type = q.type;
    }
    else if (q.stats !=null){
       data.stats = q.stats;
    }
    else{
      data={};
    }
        Model.find(data)
             .exec(function(err, model){
                if(err){
                    console.log("error");
                }else{
                    res.render('*jade*', {models: JSON.stringify(model)});
                }
            })