首页 > 解决方案 > Rails- Mongoid 查询根据字段长度过滤对象

问题描述

我想根据字段的长度过滤集合。示例:对于集合乐队,我想要乐队名称长度等于 10 的对象。

标签: ruby-on-railsruby-on-rails-4mongodb-querymongoid

解决方案


我可以想到两种方法来做到这一点。在这些示例中,假设我有以下模型:

class Band
  include Mongoid::Document

  field :name, type: String
end

聚合

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

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

常用表达

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

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

我怀疑聚合会更高效,但知道一些做某事的方法也无妨。


推荐阅读