TypeORM MongoDB存储库不会每次都保存

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (279)

我在使用TypeORM和MongoDB。我几个月以来一直使用这个库,但我有一个不常见的问题。

当我保存实体时,有时我的数据会更新,有时则不会。完全相同的请求将不会第一次工作,但第二次。我使用save()进行更新和插入。插入时一切都很好。

这是我的代码(带有NestJS的TypeORM):

==>实体

@Entity()
export class User {
  @ObjectIdColumn()
  @Type(() => String)
  id: ObjectID;

  @Column()
  address: string;
}

==> DTO

export class UpdateUserDto {
  @IsNotEmpty({ message: () => translate('validation.is_not_empty') })
  address: string;
}

==>控制器

@Put(':userId')
@Authentified()
async update(@Param('userId') userId, @Body() dto: UpdateUserDto) {
  return await this.usersService.update(userId, dto);
}

==> usersService:

import { MongoRepository } from 'typeorm';
...
private readonly userRepository: MongoRepository<User>
...
async update(userId: string, dto: UpdateUserDto): Promise<User> {
   const user = await this.userRepository.findOneOrFail(userId);
   user.address = dto.address;

   return await this.userRepository.save(user);
}

当我在save()之后找到()时,我的用户地址没有更新,而我从Mongo收到modifiedCount 1。 如果我重复这个请求,这次它可以工作......

有任何想法吗 ?

提问于
用户回答回答于

我明白了......

在你的NodeJS Auth中间件中,你记录了一个时间戳来存储用户上次连接到API的时间。这意味着你使用了save()两次:在中间件和你的服务中!有时这是有效的,因为保存时间戳足够快,让你的服务保存更新,有时不。你使用$ set的updateOne()而不是使用save(),就不再有并发问题。

扫码关注云+社区

领取腾讯云代金券