postgresql 对JSONB数组执行序列化查询

1cosmwyk  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(2)|浏览(164)

这是模型和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对象视为String文本。JSONB ARRAY中基于特定键的查询正确方法是什么?

ruyhziif

ruyhziif1#

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

fwzugrvs

fwzugrvs2#

像这样怎么样?

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

相关问题