mongodb查询不区分大小写

时间:2022-04-16 03:56:44

最近公司网站用户邮箱大小写输入错误时登录失败。经用户反馈以及上网查询才了解到原来邮箱都不区分大小写(本人菜鸟,请勿嘲笑mongodb查询不区分大小写)。比如qq邮箱abc@qq.com,输入Abc@qQ.coM时也能够登录。

对于
mysql而言,数据库查询时无论是属性名还是属性值默认都是不区分大小写的。


但是mongodb对大小写是敏感的,因此在代码中不能直接用where("email").is(EMAIL)来查询的,需要做如下修改:where("email").regex(EMAIL, "i"),其中操作符"i"表示“不区分大小写”


对应的查询命令:db.COLLECTION.find({ "FIELD":  {'$regex':'VALUE','$options':'i'}}); //FIELD是要查询的属性,如“email”,VALUE是要查询的属性值



顺便附上用户名、邮箱、手机号登录的dao层代码(采用SpringBoot框架,如有问题,还望指教~):

public UserPO findUserByAccount(String account) {
        Criteria usernameCriteria = Criteria.where("username").is(account);
        Criteria emailCriteria = Criteria.where("email").regex(account, "i");//邮箱不区分大小写
        Criteria mobileCriteria = Criteria.where("mobile").is(account);
        Query query = new Query().addCriteria(new Criteria().orOperator(usernameCriteria, emailCriteria, mobileCriteria));
        return template.findOne(query, UserPO.class);
    }