关于MongoDB的多条件查询问题
2017-08-12 00:00
351 查看
这两天用mongodb操作数据库的时候,碰到了多条件查询的问题,就是前端页面给出几个查询条件,用户任意选择一个或多个条件进行查询,后台匹配数据库后返回对应数据。
大家都知道mongodb的查询可以用find()方法,举个例子,页面上有三个查询条件:id,姓名,性别。
一般情况下后台是这样查询的
这样子的话,假如id,name,sex三个搜索条件都有值传给后台,那么最后返回前端的data就是查询出来的对应数据。
但是多条件查询的话,你不能要求用户填写完所有条件,假如用户只用姓名去查询的话,后台获取到的有效数据就只有name了,id和sex的值都是“ ”,这时候用上面的方法查询就不会有结果了,因为数据库不会只根据name去匹配,而是根据name和id=”“,sex=”“去匹配,毫无疑问,这并不是用户想要的结果。
因为mongodb的find()并不能像sql那样,判断是否空值,然后拼接字符串语句进行查询,那要怎样查询呢,直接上代码
这样子进行查询的话,就会只根据不为空的值进行匹配,用户就能获得想要的数据了。
大家都知道mongodb的查询可以用find()方法,举个例子,页面上有三个查询条件:id,姓名,性别。
一般情况下后台是这样查询的
/*代码为程序片段,并不完整,只为了说明原理*/ var id=req.body.id; var name=req.body.name; var sex=req.body.sex; Model.find({ id:id, name:name, sex:sex }).then(function(userMsg){ data=userMsg; res.json(data); return; });
这样子的话,假如id,name,sex三个搜索条件都有值传给后台,那么最后返回前端的data就是查询出来的对应数据。
但是多条件查询的话,你不能要求用户填写完所有条件,假如用户只用姓名去查询的话,后台获取到的有效数据就只有name了,id和sex的值都是“ ”,这时候用上面的方法查询就不会有结果了,因为数据库不会只根据name去匹配,而是根据name和id=”“,sex=”“去匹配,毫无疑问,这并不是用户想要的结果。
因为mongodb的find()并不能像sql那样,判断是否空值,然后拼接字符串语句进行查询,那要怎样查询呢,直接上代码
var id=req.body.id; var name=req.body.name; var sex=req.body.sex; var Data={}; /*这样子就能动态的把不为空的数据添加到Data里面了*/ if(id!="") Data.id=id; if(name!="") Data.name=name; if(sex!="") Data.sex=sex; Model.find(Data).then( function(userMsg){ data=userMsg; res.json(data); return; });
这样子进行查询的话,就会只根据不为空的值进行匹配,用户就能获得想要的数据了。
相关文章推荐
- 关于条件筛选出现的查询问题
- 关于php中使用odbc或者pdo连接sqlserver时如果查询条件中存在中文会导致查询失败的问题
- 关于mybatis 中文条件查询没结果的问题
- 关于mongodb查询数据,数值类型查找不到数据的问题
- laravel-mongodb查询条件与字段类型不一致问题
- 关于mybatis 中文条件查询没结果的问题
- 使用mybatis遇到的关于条件查询">"以及if test传参的使用问题
- 关于Mongodb查询不存在的字段时的问题
- MongoDB中关于查询条件中包括集合中字段的查询
- MySQL中关于查询条件中的字符串空格问题
- MySQL中关于查询条件中的字符串空格问题
- 关于MYSQL查询时WHERE条件值为数字的问题
- 关于MYSQL查询时WHERE条件值为数字的问题
- MongoDB中关于查询条件中包含集合中字段的查询
- MySQL中关于查询条件中的字符串空格问题
- 关于 hibernate 逻辑删除 默认查询过滤条件问题(java set 条件)
- 关于 hibernate 逻辑删除 默认查询过滤条件问题(java set 条件)
- 关于mongodb '$in' 查询无序问题
- 关于sql查询值!=的问题
- 关于hibernate的查询返回类型问题总结