【问题标题】:Using bookshelf.js to query JSON column in a PostgreSQL database使用 bookshelf.js 查询 PostgreSQL 数据库中的 JSON 列
【发布时间】:2018-12-05 05:41:41
【问题描述】:

我的 Postgres dB 表的 users 表中有一个名为 email_subscription_prefs 的列,它以 JSON 格式存储一些信息。它的 array_length 为 1。

样本数据: [{"marketing":true,"transactional":true,"collaboration":true,"legal":true,"account":true}]

问题: 我正在尝试使用 bookshelf.js ORM 根据 marketing 键的值来查询和搜索此表中的所有记录,特别是当它的值为 true 时。

这是我的代码编辑后的 ​​sn-p,显示了我正在尝试使用 bookshelf.js 实现此查询:

return new User()
   qb.where(function() {
     this.where('domicile', 'USA').orWhere('domicile', null)
   })
   qb.whereRaw('cast(email_subscription_prefs->>? as boolean) = ?', ['marketing', true])
   qb.limit(100)
  })

有人可以告诉我我在 qb.whereRaw 语句中做错了什么,我试图在其中查询 JSON 列 email_subscription_prefs

如果users 表中有数千条记录,则代码不返回任何内容。

提前致谢。

【问题讨论】:

    标签: postgresql knex.js bookshelf.js


    【解决方案1】:

    您似乎在示例数据中有一个对象数组,而不是单个 json 对象。

    [
      {
        "marketing":true,
        "transactional":true,
        "collaboration":true,
        "legal":true,
        "account":true
      }
    ]
    

    看来您正在尝试引用数组中未找到的 email_subscription_prefs->>'marketing'

    要获取数组中第一项的marketing 属性,您应该这样做:

    email_subscription_prefs->0->>'marketing'
    

    如果这不是问题所在,那么您需要从数据库中添加一些示例数据,以便能够判断问题所在。您当前的描述对查询表的描述不够好。

    【讨论】:

    • 谢谢米凯尔。这很有意义。但是,我最终通过将数组转换为单个 JSON 对象来解决这个特定的问题/问题,因为在这种情况下需要一个数组。当我遇到必须是数组的数组的相同问题时,您的评论肯定会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多