【问题标题】:Find data with no key value查找没有键值的数据
【发布时间】:2016-08-28 19:50:57
【问题描述】:

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

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

这很好用,但是当 url 中没有查询值时(如上所示),查询值将设置为 ''。然后它会整理我数据库中的所有项目,因为没有例子 name = '';

我到处搜索,但没有找到任何帮助,所以如果有人能给我小费,我将不胜感激!

【问题讨论】:

  • 如果问值是空还是null?这个答案解释了它:stackoverflow.com/a/16532000/3558900
  • 假设我有 5 个不同的查询,每个查询都没有价值。我看不到使用 { $ne: null } 的方法,我不使用很多 if 和 else 语句。而 2^5 是 32 种不同的组合,它会产生很多 if 和 else 语句。我可以以某种方式将 { $ne: null } 转换为字符串对象吗?
  • 然后以编程方式构建您的查询。如果你不想要很多 if else,你可以用一个数组做一个 for 并询问该值是否为空。 stackoverflow.com/a/15673923/3558900

标签: node.js mongodb express mongoose


【解决方案1】:
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)});
                }
            })

【讨论】:

    【解决方案2】:

    您可以根据请求查询参数的值创建您的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)});
            }
        })
    

    【讨论】:

      猜你喜欢
      • 2013-12-27
      • 1970-01-01
      • 2021-02-05
      • 2010-10-19
      • 1970-01-01
      • 2016-06-05
      • 2021-12-21
      • 2013-11-26
      • 1970-01-01
      相关资源
      最近更新 更多