【问题标题】:Case insensitive sorting with Mongoid使用 Mongoid 进行不区分大小写的排序
【发布时间】:2010-12-20 16:37:32
【问题描述】:
现在我得到了:
@directories = collection.directories.all.asc(:name)
但是它是区分大小写的,如何进行不区分大小写的排序呢?
【问题讨论】:
标签:
ruby-on-rails
ruby
mongodb
mongoid
【解决方案1】:
目前您无法在 MongoDB 中创建不区分大小写的索引,请参阅...
http://jira.mongodb.org/browse/SERVER-90
因此,这似乎意味着您也不能进行不区分大小写的“排序”。
如果您觉得该功能有用,您可以通过上面的链接为将来在 MongoDB 中包含的功能投票。
同时,来自 10Gen(MongoDB 的支持者)的 Eliot Horowitz 提出了以下建议:
短期 - 我只想添加一个
您调用 .toLower() 的第二个字段
在插入之前。然后你可以排序
关于那个。
【解决方案2】:
您可能需要存储
字段两次,一次以其实际值,
并再次全部小写。你可以
然后查询小写版本
不区分大小写的搜索(不要忘记
也将查询字符串小写)。
这种方法有效(或必要)
对于许多数据库系统,它
应该比常规表现更好
基于表达的技术(至少
用于前缀或精确匹配)。
查看answer
【解决方案3】:
如果您的收藏不会导致内存崩溃(99% 的时间),只需将其排序:
Blah.all.sort_by{|i| i.blah_field.downcase}
【解决方案4】:
regexsearch = Regexp.new(params[:search], true)
@users = User.where(:email => regexsearch).all
应该这样做:)