簡體   English   中英

僅返回 TypeORM 查找請求中的選定字段

[英]Return ONLY selected fields within a TypeORM find request

我正在努力只返回我的 TypeORM 查找請求中的選定字段。

假設有以下請求


const data = await AppDataSource.manager.find(User, {
    select: {
      id: true,
      hash: true,
      firstname: true,
      lastname: false,
    },
    take: 10, // Just here to shrink dataset
  });

該腳本運行良好,除了它返回我的 model 的每個字段,並初始化了默認值。

[
  User {
    prefix: 'usr',
    hash: 'usr_835b0ad2-XXXXXX',
    email: undefined,
    accountValidated: false,
    role: 'free',
    myKeyOne: true,
    myKeyTwo: false,
    gender: 'unspecified',
    lastConnexion: 2023-01-19T10:11:02.733Z,
    pendingDeletion: false,
    deletionDate: undefined,
    firstname: 'Clément',
    lastname: undefined,
    password: undefined,
    facebookId: undefined,
    googleId: undefined,
    id: 158
  },
  ...
]

當然不能這么用,因為我有廣泛的關系,所以負載會非常重。

您是否知道刪除所有不必要字段的方法/方法? 即我期待

[
 User {
    id: 124,
    hash: 'urs_XXXX',
    firstname: 'Clément',
 },
 ...
] 

在舊版本的 typeorm 中,我認為你需要 select 和一個字符串數組,試試:

select: ["id", "hash", "firstname"],

請參閱文檔的舊版本: https://github.com/typeorm/typeorm/blob/bc60dd559ba42af083ddea17f01205c78c83c7e0/docs/find-options.md

經過幾個小時的研究,我終於找到了為什么它會這樣。

TypeORM 依賴於 class 定義和 typescript 所以......如果你有 typescript 默認值或者如果你重寫了你的構造函數,所有“默認”屬性都會被注入。

假設用戶 model

你不應該做

@Entity({ name: 'users' })
class User {
  
  @Column()
  firstname?: string;

  @Column({ nullable: true })
  lastname?: string;

  @Column({ unique: true, nullable: false })
  email!: string;

  @Column({ name: 'account_validated', nullable: false})
  accountValidated?: boolean = false

  //Your other fields...
}

你應該做的

@Entity({ name: 'users' })
class User {
  
  @Column()
  firstname?: string;

  @Column({ nullable: true })
  lastname?: string;

  @Column({ unique: true, nullable: false })
  email!: string;

  // Use default argument of the decorator
  @Column({ name: 'account_validated', nullable: false, default: false})
  accountValidated?: boolean

  //Your other fields...
}

如果您需要以某種方式初始化默認值,則創建一個公共 static 方法,該方法返回實體而不是使用構造函數。

@Entity({ name: 'users' })
class User {
  //...fields 
  public static init(...params): User {
    let _user = new User()
    //...populate your object
    return _user

  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM