问题 使用Mongoid进行不区分大小写的排序


现在我得到了:

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

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


2790
2017-12-20 16:37


起源

如果你决定使用Ruby来做,请确保你不要使用太旧版本的Rubinius。它曾经以反向字母顺序进行不区分大小写的排序! github.com/evanphx/rubinius/issues/518 - Andrew Grimm


答案:


目前你 不能 在MongoDB中创建不区分大小写的索引请参阅...

http://jira.mongodb.org/browse/SERVER-90 

所以,这似乎意味着你不能做不区分大小写的“排序”。

如果您觉得有用,可以通过上面的链接提交该功能,以便将来包含在MongoDB中。

来自10Gen的Eliot Horowitz(MongoDB的支持者)在此期间建议:

短期内 - 我只想添加一个   您调用.toLower()的第二个字段   在插入之前。然后你可以排序   在那。


16
2017-12-21 07:46





你可能要存储   场地两次,一次具有实际价值,   并再次全部小写。您可以   然后查询小写版本   不区分大小写的搜索(不要忘记   也小写查询字符串)。

这种方法有效(或必要)   对于许多数据库系统,它   应该比常规表现更好   基于表达的技术(至少   用于前缀或完全匹配)。

检查一下 回答


4
2017-12-20 18:40





如果您的集合不会崩溃内存(99%的时间),只需在那里排序:

Blah.all.sort_by{|i| i.blah_field.downcase}

2
2018-02-19 19:37





我想你将不得不使用 正则表达式

编辑:可能不是,虽然已经请求了该功能 https://jira.mongodb.org/browse/SERVER-90 


-2
2017-12-20 17:50



是的,我正在考虑这个问题。但问题是,我不知道在哪里放正则表达式; x - Icid
如果我想搜索某些内容,我只能添加一些正则表达式。不要整理整个事情。 - Icid


regexsearch = Regexp.new(params[:search], true)

@users = User.where(:email => regexsearch).all

应该这样做:)


-4
2018-05-04 02:53