我正在编写一个webservice,用户可以选择一个必须不区分大小写的用户名.但是,我想允许他们使用用户名的区分大小写的版本.
在插入时检查用户名没有不区分大小写的副本的最佳方法是什么?我目前看到两种方法:
有没有更好的办法?
jmi*_*ola 10
存储最初输入的用户名和规范版本(应用程序的小写)是完全合理的.只要确保在设置用户名时在模型中更新规范字段,并通过规范字段的唯一索引检查约束违规.
此解决方案(原始和规范字段)有意义的另一种情况是文章,其中可能会重复使用相同的标题,但slug(对于URL)必须是唯一的.
MongoDB 3.4 现在包含创建真正不区分大小写索引的能力。它是通过指定强度为 2 的排序规则来实现的。
也许最简单的方法是在数据库本身上设置排序规则。然后所有查询都会继承该排序规则并使用它:
db.createCollection("cities", { collation: { locale: 'en_US', strength: 2 } } )
db.cities.createIndex( { city: 1 } ) // inherits the default collation
db.cities.find({city:"new york"}) //inherits default collation
Run Code Online (Sandbox Code Playgroud)
或者您可以逐个索引地执行此操作:
db.myCollection.createIndex({city: 1}, {collation: {locale: "en", strength: 2}});
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
db.myCollection.find({city: "new york"}).collation({locale: "en", strength: 2});
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息: https: //jira.mongodb.org/browse/SERVER-90