【发布时间】: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;
});
我们无法创建这样的查询,因为parsed 在where
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