我有一个带有 mongo 和 mongoid 的 Rails 3.2.x 应用程序。我想在我的模型中定义一个“范围”,按名称对我的“用户”进行排序。问题是排序应该不区分大小写,mongo 本身不支持。
有没有办法使用范围正确地做到这一点?
我有一个带有 mongo 和 mongoid 的 Rails 3.2.x 应用程序。我想在我的模型中定义一个“范围”,按名称对我的“用户”进行排序。问题是排序应该不区分大小写,mongo 本身不支持。
有没有办法使用范围正确地做到这一点?
这是一个需要持久计算字段模式的经典案例。
假设您要排序的字段称为name
。在您的模型中,捕获分配name
并设置您可以查询的附加字段。例如:
def name=(value)
self['name'] = value
self['_lc_name'] = value.downcase
end
您不需要将计算字段定义为 Mongoid 字段。
在 Mongoid 中创建一个索引_lc_name
以便更快地进行排序。index
您必须使用mongodb 聚合框架来实现这一点。
一个快速的总结是,您可以执行类似管道的命令来实现此目的(如在 unix 中)。您可以使用聚合框架执行“n”个操作。