Typeorm插入数据(即使存在)

时间:2018-12-23 18:17:27

标签: mysql node.js typescript nestjs typeorm

我正在将node.js后端与nest.js和typeorm一起用于数据库操作。 我获取一个带有要保存在mySQL数据库中的对象列表的JSON。该数据库将每天更新,但我只想保存该表中尚未存在的数据。我以为typeorm的repository.save()已经做到了,但事实并非如此。

  

save-保存给定的实体或实体数组。如果该实体已经存在于数据库中,则会对其进行更新。如果该实体在数据库中不存在,则将其插入。

也许是因为在保存时我生成了一个uuid列,而排字认为它是另一个项目吗?有人可以帮我吗?

async writeNewEPG(epgData: EpgDataDTO[]){
    const data = await this.epgDataRepository.create(epgData);
    const response = await this.epgDataRepository.save(data);
    return response;
}

实体:

import { Entity, Column, PrimaryColumn, PrimaryGeneratedColumn } from 'typeorm';

@Entity('epg_data')
export class EpgDataEntity {

    @PrimaryColumn()
    @PrimaryGeneratedColumn('uuid')
    uuid: string;

    @Column({type: "text", nullable: true})
    sname: string;

    @Column({type: "text", nullable: true})
    title: string;

    @Column({type: "int", nullable: true})
    begin_timestamp: number;

}

2 个答案:

答案 0 :(得分:0)

我之前遇到过这个问题;所以我通常先检查项目是否存在

firstVal = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="

似乎很难对所有内容进行编码。 我也尝试过async writeNewEPG(epgData: EpgDataDTO[]){ let oldData = await this.epgDataRepository.find(epgData); if (oldDate) { ... update data entity ( oldData.sname = epgData.sname; etc) } else { ... create new data entity ( oldData = new EpgDataEntity(); ) } const response = await this.epgDataRepository.save(oldData); return response; } ,有时会遇到意外错误。 渴望找到正确的答案。

答案 1 :(得分:0)

TypeORM upsert - create if not exist

请检查以上链接类型的ORM保存(以完美的方式插入和更新工作) 您需要遵循一些步骤: 像级联在您的实体中必须为真