使用 Postgres 和 Typeorm 的 jsonb 中的数组长度

Length of array inside a jsonb with Postgres and Typeorm

我正在使用 NodeJS、PostgreSQL 和 Typeorm 开发应用程序。我的数据库中有一列“数据”,它是 jsonb 类型。每个元素都具有以下结构:

{
  "a": [
    { "b": "some-text" },
    { "b": "some-text" },
    ...
  ]
}

我想要 select 所有行,其中“a”数组的大小为 N 并且数组中第一个对象的“b”字段的值为 X。

到目前为止,我尝试首先使用 jsonb_array_length 来获取大小查询,如下所示:

await this.createQueryBuilder('entity')
        .where(`jsonb_array_length("entity".data->>'a') = 5`)
        .getMany();

但是,这会引发错误:

No function matches the given name and argument types. You might need to add explicit type casts.

如有任何帮助,我们将不胜感激。

使用 -> 运算符获取 josnb 而不是 ->> 生成文本。
您的 where 表达式应该是这样的:

jsonb_array_length("entity".data -> 'a') = 5