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

时间:2018-08-12 09:05:09

标签: node.js mongodb nestjs typeorm

我在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()之后找到find()时,我的用户地址未更新,而我从Mongo收到了ModifyCount1。 如果我再次请求,这次它正在运行...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

几个月后,我终于明白了...

在我的NodeJS Auth中间件中,我记录了一个时间戳以存储用户最后一次连接到API的时间。这意味着我在中间件和服务中两次使用了save()!有时之所以起作用,是因为保存时间戳足够快,可以让我的服务保存更新,有时却不能。而不是使用save(),我将updateOne()与$ set一起使用,不再有并发问题。

我回答了我自己的问题,希望这对其他人有帮助!