使用 typeORM 搜索早于日期的数据

inf*_*dev 17 database postgresql mongodb typeorm typeorm-activerecord

我正在对Postgre DB执行查询以获取早于特定日期的数据。

这是我的功能

async filesListToDelete(): Promise<any> {
  return await this.fileRepository.find({
    where: { last_modified: { $lt: '2018-11-15 10:41:30.746877' } },
  });
}
Run Code Online (Sandbox Code Playgroud)

这是我定义文件实体的方式:

export class File {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ nullable: false })
  idFonc: number;

  @Column({ nullable: false })
  version: number;

  @Column('varchar', { length: 100, nullable: false })
  filename: string;

  @Column({ nullable: true })
  last_modified: Date;

  @Column({ nullable: false })
  device: boolean;

  @ManyToOne(type => Type, { nullable: false })
  @JoinColumn({ referencedColumnName: 'id' })
  type: Type;

  @OneToMany(type => FileDevice, filedevice => filedevice.file)
  fileDevice: FileDevice[];
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

QueryFailedError: invalid input syntax for type timestamp: "{"$lt":"2018-11-15 10:41:30.746877"}"
Run Code Online (Sandbox Code Playgroud)

小智 27

您可以使用 MoreThan,文档

async filesListToDelete(): Promise<any> {
  return await this.fileRepository.find({
   where: { 
       last_modified:  MoreThan('2018-11-15  10:41:30.746877') },
});}
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,他们不是在寻找 LessThan b/c 他们正在寻找比该日期更旧的数据吗?(MoreThan 会返回更新的数据吗?) (2认同)

小智 15

您也可以使用createQueryBuilder以下方法执行此操作:

    public async filesListToDelete(): Promise<any> {
        let record = await this.fileRepository.createQueryBuilder('file')
            .where('file.last_modified > :start_at', { start_at: '2018-11-15  10:41:30.746877' })
            .getMany();

        return record
    }
Run Code Online (Sandbox Code Playgroud)


grk*_*kmk 6

其中任何一个都将获取OLDER数据

带有内置TypeORM运算符 ( docs )

async filesListToDelete(): Promise<any> {
  return await this.fileRepository.find({
    where: { last_modified:  LessThan('2018-11-15  10:41:30.746877') },
  });
}
Run Code Online (Sandbox Code Playgroud)

PostgreSQL运算符(文档

public async filesListToDelete(): Promise<any> {
    let record = await this.fileRepository.createQueryBuilder('file')
        .where('file.last_modified < :start_at', { start_at: '2018-11-15  10:41:30.746877' })
        .getMany();

    return record
}
Run Code Online (Sandbox Code Playgroud)