mysql - Typeorm infoga data även om det redan finns


Jag använder en node.js-backend med nest.js och typeorm för databasåtgärder. Jag hämtar en JSON med en lista av objekt som jag vill spara i en mySQL-databas. Denna databas kommer att uppdateras dagligen, men jag vill bara spara de data som inte redan finns i den tabellen. Jag trodde att repository.save() i typeorm gör detta redan, men det gör det inte.

save - Sparar en given entitet eller en array av entiteter. Om entiteten redan finns i databasen uppdateras den. Om entiteten inte finns i databasen, infogas den.

Kanske är det för att jag genererar en uuid-kolumn när jag sparar och TypeORM tror att det är ett annat objekt? Kan någon hjälpa mig med detta.

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

Enhet :

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;

}

Svar #1

Jag stötte på detta problem tidigare; så jag brukar först kontrollera om objektet finns

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;
}

vilket verkar som att hårdkoda allt. Jag försökte också await Repository.updateOne(oldData) och ibland fick jag oväntade fel. Angelägen om att få reda på rätt svar.