首页 > 解决方案 > 具有 jsonb 列和非 jsonb 列的 ruby​​ 多个 where 运算符

问题描述

我正在尝试进行一个包含 jsonb 列和 2 个非 jsonb 列的查询。

多次尝试组合它们都失败了,但当我只使用 1 个其他非 jsonb 列时,其中 1 次几乎成功了。我有一个通道模型,其中包含一个“选项”商店和几个属性。

如果我将查询分开,它们就可以正常工作,但组合起来它们会检索一个空数组。我已经确保如果查询确实有效,那么肯定有数据可以返回。

非 jsonb 列 - 有效

Channel.where("platform_id = ? AND updated_at < ?",2,7.days.ago)

jsonb 列 - 有效

Channel.where("options @> ?", {valid_account: true}.to_json)

组合 where 运算符 - 返回空 []

Channel.where("platform_id = ? AND updated_at < ?",2,7.days.ago).where("options @> ?", {valid_account: true}.to_json)

1 where 运算符与组合查询 - 再次返回空 []

Channel.where("options = ? AND platform_id = ? AND updated_at < ?", {"valid_account" => true}.to_json, 2, 7.days.ago)

我现在不知所措,不知道如何将这一切都集中到一个查询中……或者是否有可能。

再次......肯定有频道应该返回上面给定的查询

TIA

更新

设法使查询正常工作。几乎尝试了所有组合,但错过了一个关键的组合。

Channel.where("options @> ? AND platform_id = ? AND updated_at > ?", {valid_account: true}.to_json, 2, 7.days.ago)

这行得通。出于某种原因,我在单独的方法中使用了“>@”,但没有为此组合它。现在都在工作。感谢您的支持

标签: ruby-on-railsrails-activerecordwhere-clausejsonb

解决方案


答案是在 jsonb 列的查询中包含“>@”

Channel.where("options @> ? AND platform_id = ? AND updated_at > ?", {valid_account: true}.to_json, 2, 7.days.ago

推荐阅读