首页 > 解决方案 > 对 JSONB 数组进行 Sequelize 查询

问题描述

这是模型和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 中的特定键进行查询的正确方法是什么?

标签: postgresqlsequelize.jsjsonbpostgresql-11

解决方案


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


推荐阅读