【问题标题】:Case insensitive sorting with Mongoid使用 Mongoid 进行不区分大小写的排序
【发布时间】:2010-12-20 16:37:32
【问题描述】:

现在我得到了:

@directories = collection.directories.all.asc(:name)

但是它是区分大小写的,如何进行不区分大小写的排序呢?

【问题讨论】:

  • 如果您决定使用 Ruby 来做这件事,请确保您不要使用太旧的 Rubinius 版本。它曾经按字母倒序进行不区分大小写的排序! github.com/evanphx/rubinius/issues/518

标签: 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
        

        应该这样做:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-29
          • 2016-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-17
          • 2018-06-14
          • 1970-01-01
          相关资源
          最近更新 更多