【问题标题】:Sequelize query on JSONB array对 JSONB 数组进行 Sequelize 查询
【发布时间】:2019-11-29 15:59:37
【问题描述】:

这是模型和postgres数据库中的JSONB数组数据类型:

.
.
.
      MyField: {
        type: DataTypes.ARRAY(DataTypes.JSONB),
        allowNull: false
      }
.
.
.

表字段包含 JSONB 值:

{"{\"LessonId\": \"1\", \"TeacherId\": \"1\"}"}

这是我在 sequelize findAll 方法中的 where 子句:

      where: {
        MyField: {
          [Op.contains]: [
            {
              TeacherId: '1',
            }
          ]
        }
      }

生成的查询是这样的:

SELECT
    ...
    "MyField",
FROM
    "MyTable" AS "MyTable" 
WHERE
    "MyTable"."MyField" @> ARRAY [ '{"TeacherId":"1"}' ]:: JSONB [];

结果集为空。但是当我也包含LessonId 时,它会做我的回答。 我发现 postgres 将 jsonb 对象视为字符串文本。根据 JSONB ARRAY 中的特定键进行查询的正确方法是什么?

【问题讨论】:

  • 你能解决这个问题吗?
  • @NightShift 你是怎么解决这个问题的?

标签: postgresql sequelize.js jsonb postgresql-11


【解决方案1】:

ARRAY 类型的基础字段和您尝试实现的操作仅在 JSONB 字段类型中受支持。您可以简单地将模型属性定义为JSONB,您仍然可以将 JSON Array 存储在其中并运行包含操作

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2019-07-02
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多