AR查询jsonb属性列

时间:2017-06-05 21:15:14

标签: postgresql ruby-on-rails-4 rails-activerecord jsonb

我正在使用Postgres作为我的数据库,我的Auction模型中有一列作为jsonb列。我想创建一个查询,搜索Auction的json列,以查看任何Auction实例的json列中是否存在用户的名称或电子邮件。

现在我有@auctions = Auction.where('invitees @> ?', {current_user.name.downcase => current_user.email.downcase}.to_json),但这只能带回我想知道姓名或电子邮件是否存在的确切key => value匹配。

2 个答案:

答案 0 :(得分:2)

  1. 您正在使用outletsCollection.forEach({ $0.isHidden = true }) 运算符。它的描述是这样的:

      

    “左侧JSON值是否包含正确的JSON路径/值条目   在顶层?“

    如果您希望在密钥(您的案例中的名称)匹配时返回一行,则可能需要@>运算符。

  2. 仅在JSON列(see this answer for more details)中搜索值不是一种好方法,但您可以检查密钥是否单独存在,还是存在密钥和值匹配。< / p>

  3. 使用与使用非JSON列相同的ActiveRecord方法和链接,即?where

    where(…).or(where(…))

答案 1 :(得分:0)

这只是一个临时补丁,直到我添加Invite模型,但将被邀请者列转换为文本我可以搜索列。像这样

SELECT * FROM auctions
WHERE data::text LIKE "%#{string I'm searching for}%"

所以,AR:

Auction.where('data::text LIKE ?', "%#{string I'm searching for}%")