【问题标题】:How to make username and email case insensitive in MongoDB如何在 MongoDB 中使用户名和电子邮件不区分大小写
【发布时间】:2021-09-28 18:25:27
【问题描述】:

我正在尝试使 kevin@gmail.com 与 KEVIN@gmail.com 相同,这是 User.js 文件。我无法找到使电子邮件和用户名不区分大小写的方法。 @username 应该与@UserName 相同。 我阅读了有关查询here 的信息,但不知道如何将其添加到架构中。我希望请求有任何大小写,但在与数据库中存储的请求进行比较时,不应区分大小写。

const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema(
    {
        username: {
            type: String,
            required: true,
            min: 3,
            max: 15,
            unique: true,
            index: {
                unique: true,
                collation: { locale: 'en', strength: 2 },
            },
        },
        email: {
            type: String,
            required: true,
            max: 50,
            unique: true,
            index: {
                unique: true,
                collation: { locale: 'en', strength: 2 },
            },
        },
        password: {
            type: String,
            required: true,
            min: 6,
        },
        profilePicture: {
            type: String,
            default: '',
        },
        cover: {
            type: String,
            default: '',
        },
        followers: {
            type: Array,
            default: [],
        },
        following: {
            type: Array,
            default: [],
        },
        isAdmin: {
            type: Boolean,
            default: false,
        },
    },
    { timestamps: true }
);

module.exports = mongoose.model('User', UserSchema);

另外,下面的代码有意义吗?

index: {
                    unique: true,
                    collation: { locale: 'en', strength: 2 }

【问题讨论】:

    标签: node.js mongodb express


    【解决方案1】:
     username: {
                type: String,
                required: true,
                min: 3,
                max: 15,
                lowercase:true,
                unique: true,
                index: {
                    unique: true,
                    collation: { locale: 'en', strength: 2 },
                },
            }
    

    你可以通过设置“lowercase:true”来解决这个问题

    当你得到输入值时,

    让 str = "KEVIN@gmail.com"; str.toLowerCase(); ("keving@gmail.com")

    会的。你可以这样做。

    【讨论】:

    • 嘿,还有一件事:例如,如果我要去一个链接说: website.com/username 但用户键入 website.com/UserName 那么它仍然可以工作吗?因为我强制数据库将其保存为小写,但用户不知道,所以输入混合字符。
    • 网址编码,大小写字母无所谓。它适用于这两种情况。
    猜你喜欢
    • 2020-09-15
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2018-04-28
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多