Как сделать регистронезависимый запрос, используя переменную? - PullRequest
2 голосов
/ 13 марта 2020

У меня уже есть пользователь с именем пользователя Кевин в моей базе данных. Я хочу, чтобы новые пользователи не выбирали Кевин , Кевин , Кевин и др. c. как их имя пользователя при создании учетной записи. Как мне изменить мой запрос, чтобы проверить, существует ли такой пользователь, игнорируя чувствительность к регистру?

def validate_username(self, username):
    if db.users.find_one({"username":username}):
        raise ValidationError("username is already taken")

Ответы [ 3 ]

1 голос
/ 13 марта 2020
db.users.find({ "username" : { "$regex" : username , "$options" : "i"}});

или

db.users.find({'username':{'$regex' : '^username$', '$options' : 'i'}})
1 голос
/ 13 марта 2020

просто поместите «без учета регистра уникальный индекс» в поле имени пользователя.

если кто-то введет существующее имя пользователя, mon go выдаст ошибку дублирующего ключа, которую вы можете обработать в своем коде, и попросит пользователя ввести другое имя пользователя.

вы можете создать индекс следующим образом:

db.collection.createIndex(
    {
        username: "username_idx",
        unique: true,
        collation: {
            locale: "en",
            strength: 2
        }
    }
)
1 голос
/ 13 марта 2020

Не уверен, доступен ли он в пн go напрямую. в качестве альтернативы, добавьте еще одно поле в ваш пользовательский документ и, сохраняя имя пользователя, преобразуйте его в нижний регистр и сохраните код ha sh в поле кода ha sh.

Итак, имя пользователя: Kevin, hashcode: (хеш-код «kevin»)

В следующий раз, когда пользователь вводит имя пользователя: KeViN, хэш-код: (хеш-код kevin)

Нет, если вы ставите ограничение проверки подлинности или уникального ключа на код руки .. это должно решить это.

...