typeorm 相关问题

TypeORM是TypeScript和JavaScript的对象关系映射器,支持许多不同的数据库,如MySQL和PostgreSQL以及Node.js和Browser等平台。

Typeorm、Node.js 中的 queryRunner.commitTransaction() 之后更新会有任何影响

Node.js / Nest.js /Typeorm /postgresql 我的代码是 我有餐桌农场 |编号 |中心点类型 GeoJson |点类型 GeoPoints| 可以保存到数据库,之前有其他更新方式吗

回答 1 投票 0

created_at 必须出现在 GROUP BY 子句中或在聚合函数中使用 pgsql typeorm Nestjs Nodejs

我正在将nestjs与typeorm pgsql一起使用。 我想根据传递的时区获取潜在客户的数量,因此我使用以下代码: async getEnquiryCounts(year: string, timezone: string): Promise 我正在将 Nestjs 与 typeorm pgsql 一起使用。 我想根据经过的时区获取我的潜在客户数量,因此我使用此代码: async getEnquiryCounts(year: string, timezone: string): Promise<ApiResponseDto<any>> { const stats = await this.enquiryRepo .createQueryBuilder('enquiries') .select("EXTRACT(MONTH FROM enquiries.createdAt AT TIME ZONE ':timezone') as month") .addSelect('COUNT(*)', 'totalEnquiries') .addSelect('SUM(CASE WHEN enquiries.status = :newLead THEN 1 ELSE 0 END)', 'newLead') .addSelect('SUM(CASE WHEN enquiries.status = :docUpload THEN 1 ELSE 0 END)', 'docUpload') .addSelect('SUM(CASE WHEN enquiries.status = :inProgress THEN 1 ELSE 0 END)', 'inProgress') .addSelect('SUM(CASE WHEN enquiries.status = :rejected THEN 1 ELSE 0 END)', 'rejected') .addSelect('SUM(CASE WHEN enquiries.status = :agreementCreated THEN 1 ELSE 0 END)', 'agreementCreated') .addSelect('SUM(CASE WHEN enquiries.status = :didNotProceed THEN 1 ELSE 0 END)', 'didNotProceed') .where("DATE_PART(\'year\', enquiries.createdAt AT TIME ZONE ':timezone') = :year", { year: year }) .groupBy("EXTRACT(MONTH FROM enquiries.createdAt AT TIME ZONE ':timezone')") .setParameters({ newLead: EnquiryStatus.NewLead.toString(), docUpload: EnquiryStatus.DocUpload.toString(), inProgress: EnquiryStatus.InProgress.toString(), rejected: EnquiryStatus.Rejected.toString(), agreementCreated: EnquiryStatus.AgreementCreated.toString(), didNotProceed: EnquiryStatus.DidNotProceed.toString(), timezone: timezone, }) .getRawMany(); const monthsWithData = stats.map((item) => parseInt(item.month)); const yearRange = Array.from({ length: 12 }, (_, i) => i + 1); const finalStats = yearRange.map((month) => { const foundMonthIndex = monthsWithData.indexOf(month); if (foundMonthIndex === -1) { return { month: month.toString(), totalEnquiries: '0', rejected: '0', agreementCreated: '0', inProgress: '0', newLead: '0', docUpload: '0', didNotProceed: '0', }; } else { return stats[foundMonthIndex]; } }); return { data: finalStats }; } 但这表明: [Nest] 37372 - 06/01/2024, 12:46:36 PM ERROR [ExceptionsHandler] column "enquiries.created_at" must appear in the GROUP BY clause or be used in an aggregate function QueryFailedError: column "enquiries.created_at" must appear in the GROUP BY clause or be used in an aggregate function at PostgresQueryRunner.query (E:\PROJECTS\backend\src\driver\postgres\PostgresQueryRunner.ts:299:19) at processTicksAndRejections (node:internal/process/task_queues:95:5) 像这样的 pgsql admin 上的简单查询正在工作: SELECT EXTRACT(MONTH FROM enquiries.created_at AT TIME ZONE 'Asia/Calcutta') AS month, COUNT(*) AS "totalEnquiries", SUM(CASE WHEN enquiries.status = 'NewLead' THEN 1 ELSE 0 END) AS "newLead", SUM(CASE WHEN enquiries.status = 'DocUpload' THEN 1 ELSE 0 END) AS "docUpload", SUM(CASE WHEN enquiries.status = 'InProgress' THEN 1 ELSE 0 END) AS "inProgress", SUM(CASE WHEN enquiries.status = 'Rejected' THEN 1 ELSE 0 END) AS "rejected", SUM(CASE WHEN enquiries.status = 'AgreementCreated' THEN 1 ELSE 0 END) AS "agreementCreated", SUM(CASE WHEN enquiries.status = 'DidNotProceed' THEN 1 ELSE 0 END) AS "didNotProceed" FROM enquiries WHERE DATE_PART('year', enquiries.created_at AT TIME ZONE 'Asia/Calcutta') = 2024 GROUP BY EXTRACT(MONTH FROM enquiries.created_at AT TIME ZONE 'Asia/Calcutta'); 这工作正常,并显示正确的结果。 对此有任何帮助还是我错过了什么? 不确定您的 ORM 工具如何搞乱查询。考虑原始 SQL? 无论哪种方式,这个查询都好多了更好: SELECT extract(MONTH FROM e.created_at AT TIME ZONE 'Asia/Calcutta') AS month , count(*) AS "totalEnquiries" , count(*) FILTER (WHERE e.status = 'NewLead') AS "newLead" -- !!! , count(*) FILTER (WHERE e.status = 'DocUpload') AS "docUpload" , count(*) FILTER (WHERE e.status = 'InProgress') AS "inProgress" , count(*) FILTER (WHERE e.status = 'Rejected') AS "rejected" , count(*) FILTER (WHERE e.status = 'AgreementCreated') AS "agreementCreated" , count(*) FILTER (WHERE e.status = 'AgreementCreated') AS "didNotProceed" FROM enquiries e WHERE e.created_at >= timestamp '2024-1-1' AT TIME ZONE 'Asia/Calcutta' -- !!! AND e.created_at < timestamp '2025-1-1' AT TIME ZONE 'Asia/Calcutta' -- sargable GROUP BY 1; 您的 WHERE 条件在表列上带有表达式会使它不必要地昂贵。将表达式移动到输入侧。 现代聚合FILTER条款更短、更清晰、更便宜。参见: 使用附加(不同)过滤器聚合列 旁白:如果可能的话,请避免在 Postgres 中使用大小写混合的标识符,这有助于避免混淆。参见: PostgreSQL 列名区分大小写吗?

回答 1 投票 0

使用TypeORM更新多对多关系

我在更新具有多对多关系的实体时遇到问题,好奇我是否做错了什么,或者更具体地说,正确的方法是什么 考虑以下实体... @

回答 5 投票 0

关于TypeORM插入中数据结构意外修改的查询

我在使用 TypeORM 时在共享代码存储库中遇到意外行为。 这是导致问题的代码片段: const FilteredProducts = //大量数据。 常量

回答 1 投票 0

nestjs 如何工作并使用参数运行构造函数

我是nestJS的新手,也找不到太多关于它的信息,所以我也不敢深入研究它的源代码(也是打字稿的初学者)。我真的很想知道这些东西是如何工作的,我会

回答 1 投票 0

如何使用 TypeORM 正确使用 orWhere 查询进行查询

我尝试在 TypeORM 中使用 orWhere 子句,如下所示。该查询应该通过标题和注释字段中的字符搜索来查找注释。我需要具有给定

回答 1 投票 0

ORM 或中间件清理级别?

我目前正在开发一个使用 Nest.JS 作为后端框架的 Web 应用程序。 我想清理值以避免潜在的 XSS 攻击(包 sanitize-html)。 我应该对...

回答 1 投票 0

Typescript 中的 Java 枚举等效项

你能告诉我是否可以在 Typescript 中创建这样的枚举吗? 公共枚举 FooEnum { ITEM_A(1)、ITEM_B(2)、ITEM_C(3); 私有 int 订单; 私人 FooEnum (int order) { 这个。

回答 2 投票 0

无法在nx-nestjs项目中使用TypeOrm:ERR_REQUIRE_ESM

我正在将我的 NestJS-TypeOrm 应用程序迁移到 monorepo(NX 工作区)。 每当我尝试运行该应用程序时,都会收到此错误: C:\我的项目 ode_modules\@nrwl ode\src 执行器 颂 带有要求覆盖的颂歌...

回答 1 投票 0

TypeORM:使用数据映射器模式的实体上的辅助方法

我们正在构建一个相当大的应用程序,并选择使用 TypeORM 的数据映射器模式进行维护。我们使用 TypeORM 版本 0.2.45。 当我在实体类上定义方法时,...

回答 1 投票 0

typeorm 连接与查询构建器

我使用 typeorm join 而不在表中建立关系。这是我的查询: 让查询 = userRepository.createQueryBuilder("u") .where("u.academicYear = :year", { 年 }) .

回答 1 投票 0

typerom 与查询构建器连接

我正在使用 typerom join,而不在我的查询表中建立关系 让查询 = userRepository.createQueryBuilder("u") .where("u.academicYear = :year", { 年 }) .

回答 1 投票 0

在 Typeorm 中创建与数据库的连接的正确方法 - Nodejs

我是 typeorm 的新手,正在尝试创建与数据库的连接。我阅读了 typeorm 的文档并找到了这段代码,它使用 DataSource 创建连接: 导入“反射元数据” 导入 {

回答 1 投票 0

TypeORM:自定义多对多关系不会一直填充

我通过联合表 BusinessSalesperson 在 Business 和 Salesperson 之间建立了自定义的多对多关系。这是我当前的代码 商业 @OneToMany(() => 业务销售人员,...

回答 1 投票 0

在NestJS中手动注册一个typeorm EventSubscriber,而不需要在配置文件中指定

在 NestJS 中,我扩展了 EntitySubscriberInterface 类来创建通用的 EventSubscriber。 我的目标是每次插入一些东西时捕获所有 typeorm 存储库事件“beforeInsert”...

回答 2 投票 0

如何重命名 typeorm 中的唯一字段约束?

我使该字段在 typeorm 实体中唯一 当尝试保存数据时,当然我收到此错误重复键值违反唯一约束IDX_a000cca60bcf04454e72769949 我想进入

回答 1 投票 0

如何限制 typeorm 中连接查询的行数?

常量顾问=等待顾问存储库 .createQueryBuilder() 。选择([ '顾问.created_at', '顾问.id', '顾问.部门', '咨询...

回答 1 投票 0

如何选择子实体所有记录名称/标题到父实体列表中作为带有逗号分隔字符串的单个属性

内容:[{ title: '测试内容IV', 类型:'链接', 类别:'类别', 关键字:'tset,测试', 更新时间:2024-05-13T12:21:28.018Z, is_disabled: 真 }, { title: '测试内容IV', 类型:'链接',

回答 0 投票 0

TypeORM:列选项中的 @Unique 装饰器和 { unique: true } 有什么区别?

在 TypeORM 中,您可以在列选项中设置唯一标志,或将列设置为实体的唯一。 什么时候使用哪个,有什么区别? @独特([“

回答 2 投票 0

错误 TypeOrmModule 无法使用“ETIMEDOUT”或“握手不活动超时”连接到数据库

我有一个 NestJS (v8.2.x) 服务器应用程序,我正在尝试使用 TypeORM (v0.2.41) 和 mysql (v2) 连接到 AWS Arura 3.x(MySQL 8.x 协议) .18.1) 或 mysql2 (v2.3.3) 驱动程序...

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.