Замените _id на id в Nest Js + Typegoose - PullRequest
0 голосов
/ 23 марта 2020

Я использую Гнездо Js + Тип goose. Как заменить _id на id в Nest Js + Тип goose? Я не нашел четкого примера. Я пробовал что-то, но безрезультатно.

@modelOptions({
  schemaOptions: {
    collection: 'users',
  },
})
export class UserEntity {
  @prop()
  id?: string;

  @prop({ required: true })
  public email: string;

  @prop({ required: true })
  public password: string;

  @prop({ enum: UserRole, default: UserRole.User, type: String })
  public role: UserRole;

  @prop({ default: null })
  public subscription: string;
}
@Injectable()
export class UsersService {
  constructor(
    @InjectModel(UserEntity) private readonly userModel: ModelType<UserEntity>,
  ) {}

  getOneByEmail(email: string) {
    return from(
      this.userModel
        .findOne({ email })
        .select('-password')
        .lean(),
    );
  }
}

1 Ответ

0 голосов
/ 23 марта 2020

Я могу сказать, что он лежит в основе mon goose поведение Вы можете отправить JSON с 'id' вместо '_id', виртуальное свойство на всех ваших моделях - это довольно безопасный и простой способ сделать это.

Пример:

export const NotesSchema = new Schema({
  title: String,
  description: String,
});

NotesSchema.virtual('id')
    .get(function() {
      return this._id.toHexString();
});

или вы можете создать метод toClient () в ваших моделях, где вы это делаете. Это также хорошее место для переименования / удаления других атрибутов, которые вы не хотите отправлять клиенту:

NotesSchema.method('toClient', function() {
    var obj = this.toObject();

    //Rename fields
    obj.id = obj._id;
    delete obj._id;

    return obj;
});
...