最近公司网站用户邮箱大小写输入错误时登录失败。经用户反馈以及上网查询才了解到原来邮箱都不区分大小写(本人菜鸟,请勿嘲笑)。比如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); }