【问题标题】:Mongoid 4: like query on integer columnMongoid 4:像查询整数列
【发布时间】:2014-09-09 08:17:48
【问题描述】:

我需要使用 INTEGER COLUMN 进行类似查询的 mongoid 搜索。例如:

SELECT * FROM users WHERE mobile LIKE '%9980%';

这是我的模型:

class User
  include Mongoid::Document
  include Mongoid::Timestamps

  ##
  # Columns
  field :name,                      type: String
  field :mobile,                    type: Integer
end

我已经尝试过以下示例。但没有运气:(

User.where(:$where => "/^#{params[:mobile]}/")
User.any_of({mobile: /.*#{params[:mobile]}.*/i})
User.where(mobile: /8801/))

用mongoid怎么写?

【问题讨论】:

  • 手机?您是否将电话号码存储为号码?

标签: ruby-on-rails mongodb mongoid mongoid4


【解决方案1】:

试试这个

User.where(mobile: /.*#{params[:mobile]}.*/i)

【讨论】:

  • 感谢您尝试帮助我,但它不起作用。我认为问题是mobile 列是Integer
【解决方案2】:

解决方案:

users = User.where(:$where => "/^#{params[:mobile]}/.test(this.mobile)")

【讨论】:

    【解决方案3】:

    User.where(:mobile => /\d*{params[:mobile]}\d*/)

    Mongoid中的like函数只是whereregexp的论证

    【讨论】:

    • 您好,感谢您帮助我。我运行你的代码,但它不起作用。这是命令:User.where(:mobile => /\d*8801\d*/).length。它向我显示 0。但在我的数据库中它是 32。
    • 抱歉,我忽略了 mobile 字段是 Integerregexp 可能仅适用于 String 字段。为什么mobile字段使用整数类型,如果手机是18892887374,它对于整数来说那么大。
    • 因为在我国的手机号由8个字符组成。有什么办法吗?
    • 使用ruby方式User.all.select {|u| u.mobile.to_s.include?(params[:mobile])}
    • 嗯,它会减少我的加载​​时间:(
    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多