JSONB 数组上的 Sequelize 查询

Nig*_*ift 5 postgresql sequelize.js jsonb postgresql-11

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

.
.
.
      MyField: {
        type: DataTypes.ARRAY(DataTypes.JSONB),
        allowNull: false
      }
.
.
.
Run Code Online (Sandbox Code Playgroud)

表字段包含 JSONB 值:

{"{\"LessonId\": \"1\", \"TeacherId\": \"1\"}"}
Run Code Online (Sandbox Code Playgroud)

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

      where: {
        MyField: {
          [Op.contains]: [
            {
              TeacherId: '1',
            }
          ]
        }
      }
Run Code Online (Sandbox Code Playgroud)

生成的查询是这样的:

SELECT
    ...
    "MyField",
FROM
    "MyTable" AS "MyTable" 
WHERE
    "MyTable"."MyField" @> ARRAY [ '{"TeacherId":"1"}' ]:: JSONB [];
Run Code Online (Sandbox Code Playgroud)

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

Abd*_*jid 0

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