查找没有键值的数据
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));
)
【讨论】:
以上是关于查找没有键值的数据的主要内容,如果未能解决你的问题,请参考以下文章