【问题标题】:rails, postgres and jsonb. query doesn't find records导轨、postgres 和 jsonb。查询未找到记录
【发布时间】:2017-12-14 02:34:09
【问题描述】:

我无法通过查询找到相关记录。

这是我的测试记录:

model: Submission
column name: contents (jsonb)

记录创建者:Submission.create(contents: {ada: 'ada'})

这里是查询:Submission.where("contents->>'ada'='ada'").first

结果是nil

记录在数据库中并且(假设记录 id=1)

Submission.find(1).contents[:ada]=='ada'

结果为@​​987654326@

【问题讨论】:

  • 您的查询没有明显问题。不过,您的 健全性检查 似乎有问题。我会 认为 它会返回 false,因为 ada 键不是符号。 (刚刚使用您的示例在本地进行了快速测试,我能够按预期创建/查询,并且您的完整性检查失败,除非我使用contents['ada']=='ada'。)您能否包括您的架构?您的列是否有可能实际上不是 jsonb 类型?
  • 感谢您的回复,如您所描述的,健全性检查结果为真,如果按照您的方式完成,则结果为假。根据 pgAdmin,列是 jsonb(我曾经将它作为 var char,但是当它开始抛出错误时,我意识到我忘了把它变成一个实际的 jsonb)
  • 这是提交模式的一部分:create_table "submissions", force: :cascade do |t| t.integer "user_id" t.string "name", 默认: "" t.string "contents_old", 默认: "" t.datetime "created_at", null: false t.datetime "updated_at", null: false t. jsonb "contents", 默认: {}, null: false t.index ["contents"], name: "index_submissions_on_contents", using: :gin t.index ["user_id"], name: "index_submissions_on_user_id", using: : btree结束

标签: ruby-on-rails postgresql jsonb


【解决方案1】:

尝试关注,参考this

Submission.where('contents @> ?', {ada: 'ada'}.to_json)

【讨论】:

  • 谢谢 Salil,但您的查询也导致其中没有记录
【解决方案2】:

好的,所以我仍然不确定发生了什么,但问题在于我在迁移中分配了 {} 的默认值。删除此默认分配后,一切都会按预期进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多