查找没有键值的数据

Posted

技术标签:

【中文标题】查找没有键值的数据【英文标题】: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?这个答案解释了它:***.com/a/16532000/3558900 假设我有 5 个不同的查询,每个查询都没有价值。我看不到使用 $ne: null 的方法,我不使用很多 if 和 else 语句。而 2^5 是 32 种不同的组合,它会产生很多 if 和 else 语句。我可以以某种方式将 $ne: null 转换为字符串对象吗? 可能是***.com/questions/31995166/…的欺骗 然后以编程方式构建您的查询。如果你不想要很多 if else,你可以用一个数组做一个 for 并询问该值是否为空。 ***.com/a/15673923/3558900 【参考方案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));
        
    )

【讨论】:

以上是关于查找没有键值的数据的主要内容,如果未能解决你的问题,请参考以下文章

需要对查找多个外键值的 SQL 查询使用“VLOOKUP”类型的操作 - SOS

multimap容器怎么查找多个具有相同键值的数据?

在具有显式键值的对象列表中查找元素

如何在dict列表中查找字符串作为键值的一部分? [关闭]

用于在Yaml文件中查找键值的正则表达式

QSettings如何在没有键值的情况下读取ini