【问题标题】:Find in array of jsons postgres typeORM node js在 jsons postgres typeORM 节点 js 的数组中查找
【发布时间】:2021-04-26 03:17:42
【问题描述】:

问题描述

@Entity({name: 'reports'}) 导出类报告扩展 BaseEntity {

@PrimaryGeneratedColumn()
public id: number;

@Column({name: 'dates_parsed', type: 'jsonb'})
public datesParsed: any;

}

我想查找第 > 3 天的所有报告。

在 PgAdmin 中使用 SQL 我可以使用下一个查询找到正确的数据

SELECT  r.id, p ->> 'day' as day
FROM   "reports" r, jsonb_array_elements(r.dates_parsed) p
where (p->>'day')::int > 3

SELECT * FROM "reports" r
WHERE r.id IN (SELECT  t.id
FROM   "reports" t, jsonb_array_elements(t.dates_parsed) p
where (p->>'day')::int > 3)

我们无法使用 jsonb_array_elements 从它需要 entityTarget

    const qb = this.createQueryBuilder(`reports`)
        .where(qb2 => {
            const subQuery = qb.subQuery()
                .select('report.id')
                .from(Report, 'report')
                .from('jsonb_array_elements(report.dates_parsed)', 'dates')
                .where(`(dates->>'day')::int > 3`)
                .getQuery();
            return `reports IN ` + subQuery;
        });

我们无法创建这样的查询,因为parsedwhere

中是不可见的
    const qb = this.createQueryBuilder(`reports`);
    qb.where(qb2 => {
        const subQuery = qb.subQuery()
            .select('report.id')
            .select('jsonb_array_elements(report.dates_parsed)', 'parsed')
            .from(Report, 'report')
            .where(`(parsed->>'day')::int > 3`)
            .getQuery();
        return `reports IN ` + subQuery;
    });

如果我想在表中查找数据,如何使用 typeorm 创建查询。其中一天等于 5

[{ “id”:“1”, “日期解析”:[ { “天”:6 }, { “天”:3 } ], “id”:“2”, “日期解析”:[ { “天”:10 }, { “天”:5 } ], ]

我的环境

Dependency Version
Operating System macos
Node.js version v14.5
Typescript version v4.0.3
TypeORM version v0.2.28

附加上下文

相关的数据库驱动程序

  • []aurora-data-api
  • []aurora-data-api-pg
  • []better-sqlite3
  • []cockroachdb
  • []cordova
  • []expo
  • []mongodb
  • [ ] mysql
  • []nativescript
  • [ ] oracle
  • [x]postgres
  • []react-native
  • []sap
  • []sqlite
  • []sqlite-abstract
  • []sqljs
  • []sqlserver

【问题讨论】:

    标签: node.js postgresql typeorm


    【解决方案1】:

    如何解决它的一个示例

    
    const qb = this.createQueryBuilder(`reports`);
     
    qb.andWhere((`reports.id IN (SELECT  t.id FROM   "reports" t, jsonb_array_elements(t.dates_parsed) p where (p->>'day')::int = 5)`));
    
    

    【讨论】:

      猜你喜欢
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2019-08-13
      • 2017-01-27
      • 2019-12-27
      • 2020-03-28
      • 2021-07-29
      相关资源
      最近更新 更多