关于MongoDB的多条件查询问题

这两天用mongodb操作数据库的时候,碰到了多条件查询的问题,就是前端页面给出几个查询条件,用户任意选择一个或多个条件进行查询,后台匹配数据库后返回对应数据。

大家都知道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;
});

这样子进行查询的话,就会只根据不为空的值进行匹配,用户就能获得想要的数据了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值