如何在MongoDB中比较字符串是小写还是大写

时间:2019-03-20 20:32:39

标签: node.js regex mongodb express mongodb-query

我正在从事一个MERN项目,并且在用户登录时,我发现该用户是这样的:

User.findOne({username:req.body.username})。exec(function(err,user){ 如果(用户){ 代码行... });

想象一下我的用户名是Imran保存在Db中,并在上面的代码中将用户名发送为。

案例1: req.body.username =伊姆兰 用户发现 1

案例2: req.body.username = imran 用户发现 0

案例3: req.body.username = imRan 用户发现 0

如果我使用正则表达式来查找这样的用户名...

User.findOne({username:{$ regex:username,$ options:“ i”}})

它将在上述所有情况下找到用户,但是如果我输入imr而不是Imran或imran或imRan并输入密码,它将再次登录该用户,这是不正确的!所以我希望。如果有人可以帮我解决这个问题!那就太好了!

3 个答案:

答案 0 :(得分:1)

在保存数据时,您想通过调用username.toLowerCase()(或toUpperCase())来规范化数据。然后,当您执行查询时,您将呼叫User.findOne({username:req.body.username.toLowerCase()})

答案 1 :(得分:0)

如果大小写Imranimran是两个不同的用户,我建议至少存储小写的用户名。无论哪种方式,要匹配不区分大小写的查询,您都可以尝试以下方法:

User.findOne({username: /^imran$/i})

User.findOne({username: {$regex: '^imran$', $options: 'i'}})

在最后一个中,您将正则表达式值作为字符串传递,以便可以在^$之间包含一个变量,希望对您有所帮助。

答案 2 :(得分:0)

谢谢大家的帮助!我找到了适合我的解决方案。 User.findOne({用户名:new RegExp(“ \ b” +用户名+“ \ b”,“ i”)}...。 无论用户名字符串是小写还是大写,这都将与之匹配。希望对您有帮助:)