Rails-Mongoid查询,根据字段长度过滤对象



我想根据字段的长度筛选集合。示例:对于集合Band,我想要Band名称长度等于10的对象。

我可以考虑两种方法。在这些例子中,让我们假设我有以下模型:

class Band
include Mongoid::Document
field :name, type: String
end

聚合

如果您使用的是MongoDB服务器3.6或更新版本,则可以使用$expr运算符在查询中包含聚合操作。在本例中,我使用$strLenCP运算符来查找name字段具有5个Unicode代码点的任何文档:

Band.where("$expr": { "$eq": [ { "$strLenCP": "$name" }, 5 ] })

正则表达式

您还可以使用一个Ruby正则表达式来匹配任何五个字符的字符串:

Band.where(name: /A.{5}z/)

我怀疑聚合会更有表现力,但知道一些做某事的方法不会有什么坏处。

最新更新