【问题标题】:Rails- Mongoid query to filter objects based on length of a fieldRails- Mongoid 查询根据字段长度过滤对象
【发布时间】:2020-03-30 13:18:14
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 mongodb-query mongoid


    【解决方案1】:

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

    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/)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 2011-12-24
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多