ruby-on-rails 如何在Mongoid中找到字段数组计数大于一定数量的所有记录?

qmelpv7a  于 12个月前  发布在  Ruby
关注(0)|答案(4)|浏览(114)

我基本上有一个User对象,在它里面定义了一个数组fieldphone_numbers。我想获取数据库中所有phone_numbers计数大于1的用户对象。
有没有资源可以学习这样的查询?我在网上找不到任何有用的东西,因为大多数结果都是针对更简单的查询。
代码:

class Location
  include Mongoid::Document

  field :name
  field :phone_numbers, type: Array
end

字符串
我尝试了以下方法,但不起作用:

Location.where("this.phone_numbers.count < 1").count


谢谢你,谢谢

ki1q1bka

ki1q1bka1#

此查询搜索phone_numbers[0]字段中是否存在任何对象

Location.where(:"phone_numbers.0".exists => true).count

字符串
此查询解决了获取大于1的电话号码计数的问题;如果字段phone_numbers[0]存在,则表示数组中至少有电话号码

z3yyvxxp

z3yyvxxp2#

将无法通过查询检查此信息.在文档中创建一个字段,该字段将保留phone_numbers数组的计数,每次像这样更新保存文档的值

class Location
   include Mongoid::Document

   field :name
   field :phone_numbers, type: Array
   field :phone_number_count, type: Integer

   after_save do |location|
      if location.phone_numbers.blank?
         location.phone_number_count = 0
      else
         location.phone_number_count = location.phone_numbers.size 
      end
      location.save
   end
end

字符串
然后你可以运行查询

Location.where(:phone_number_count.gt => 1).enteries

iugsix8n

iugsix8n3#

我只是在搜索避免聚合的解决方案失败后才有了这个想法:

array_sizes_to_avoid = (0..1).map do |avoid_count| 
  { phone_numbers: { '$size' => avoid_count } }
end
User.not(User.any_of(array_sizes_to_avoid))

字符串
有点笨重,但很好用。

xpcnnkqh

xpcnnkqh4#

试试这个:

Location.where(:phone_numbers.gte => '1').count

字符串

相关问题