我想根据字段的长度筛选集合。示例:对于集合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/)
我怀疑聚合会更有表现力,但知道一些做某事的方法不会有什么坏处。