MongoDB 쿼리 (pymongo를 통해) 대소 문자를 효율적으로 구분하지 않습니다.

저는 현재 사용자가 가입하고 로그인해야하는 python (pyramid) 웹 사이트를 만들고 있습니다. 시스템은 사용자가 대문자, 소문자, 소문자를 혼합 한 사용자 이름을 선택할 수 있도록합니다. 두 사용자가 실수로 동일한 사용자 이름을 공유하지 않도록 할 때 문제가 발생합니다. 즉, 내 시스템에서 'randomUser'가 'RandomUser'또는 'randomuser'와 같아야합니다.

불행히도 (in 이 경우) Mongo는 문자열을 대소 문자를 구분하여 저장하기 때문에 '동일한'사용자 이름을 가진 사용자가 여러 명있을 수 있습니다.

mongo에서 대소 문자를 구분하지 않는 문자열을 쿼리하는 방법을 알고 있습니다.

db.stuff.find_one({"foo": /bar/i});

그러나 이것은 pymongo를 사용하는 내 쿼리 방법에서 작동하지 않는 것 같습니다.

username = '/' + str(username) + '/i'
response = request.db['user'].find_one({"username":username},{"username":1})

이게 맞습니까? pymongo에 대한 쿼리를 구성하는 방법 (나는 그렇지 않다고 가정합니다)?

이 쿼리는 사용자 계정이 생성되거나 로그인 될 때마다 사용됩니다 (사용자 이름이 시스템에 있는지 확인해야하므로). 가장 효율적인 쿼리가 아니라는 것을 알고 있으므로 로그인 또는 계정 생성에만 사용되는 것이 중요합니까? 대신 사용자가 소문자 사용자 이름 만 선택하도록하는 것이 더 바람직합니까 (대소 문자를 구분하지 않는 쿼리가 필요하지 않음)?

21
задан johneth 7 June 2011 в 14:26
поделиться