ruby-on-rails - 具有 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)
这行得通。出于某种原因,我在单独的方法中使用了“>@”,但没有为此组合它。现在都在工作。感谢您的支持
解决方案
答案是在 jsonb 列的查询中包含“>@”
Channel.where("options @> ? AND platform_id = ? AND updated_at > ?", {valid_account: true}.to_json, 2, 7.days.ago
推荐阅读
- html - “Lato”谷歌字体在 Safari 和 Chrome 中垂直拉伸
- java - ObjectMapper 在尾随字符上不会失败
- php - 如果我有参数,sql查询慢
- node.js - 无法计算存储在 mongo db 中的 json 数组的所有对象
- java - Android - GregorianCalendar 显示错误的月份
- node.js - 为什么将 Ubuntu 升级到 20.04 会从系统中删除 nodejs、mySQL 工作台?
- python - 如何检查随机混合大小写的单词是否在字符串中
- css - 带有反应的无头 WordPress - 后端和前端 Gutenberg 的样式
- javascript - Webpack 监视模式不适用于 html-webpack 和 clean-webpack 插件
- ruby-on-rails - Google::Cloud::Bigquery:Module in rails 的未定义新方法