ruby-on-rails - Rails- Mongoid 查询根据字段长度过滤对象
问题描述
我想根据字段的长度过滤集合。示例:对于集合乐队,我想要乐队名称长度等于 10 的对象。
解决方案
我可以想到两种方法来做到这一点。在这些示例中,假设我有以下模型:
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/)
我怀疑聚合会更高效,但知道一些做某事的方法也无妨。
推荐阅读
- html - 电子邮件模板无法在 Gmail 客户端 Iphone 中正确呈现
- docker - NextCloud Docker 发送未加密的凭证
- excel - 工作代码返回运行时错误“-2147352571 (80020005)”
- python - 在同一数据框列中添加值
- c++ - 如何将一个结构分配给另一个 (C++14)
- faunadb - FaunaDB:查询其他集合未引用的所有文档
- mongodb - NestJS中的TypeORM无法连接到MongoDB
- svelte-3 - 生产中的 Svelte 路由不适用于动态构建链接(Svelte Router SPA)
- python - 如何从 hydra 配置文件传递字典元素
- qt - 在 PyQt5 中取消 QThread