【发布时间】:2020-03-30 13:18:14
【问题描述】:
我想根据字段的长度过滤集合。 示例:对于集合乐队,我想要乐队名称长度等于 10 的对象。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 mongodb-query mongoid
我想根据字段的长度过滤集合。 示例:对于集合乐队,我想要乐队名称长度等于 10 的对象。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 mongodb-query mongoid
我认为有两种方法可以做到这一点。在这些示例中,假设我有以下模型:
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/)
我怀疑聚合的性能会更好,但知道一些做某事的方法不会有什么坏处。
【讨论】: