Node.js TypeORM MongoDB存储库赢得';不要每次都储蓄
我与TypeORM和MongoDB打交道。我从几个月前开始使用这个图书馆,但我有一个不寻常的问题 保存实体时,有时更新数据,有时不更新。完全相同的请求第一次不起作用,但第二次会起作用。我使用save()进行更新和插入。插入时一切正常 以下是我的代码(使用NestJS键入表单): ==>实体Node.js TypeORM MongoDB存储库赢得';不要每次都储蓄,node.js,mongodb,nestjs,typeorm,Node.js,Mongodb,Nestjs,Typeorm,我与TypeORM和MongoDB打交道。我从几个月前开始使用这个图书馆,但我有一个不寻常的问题 保存实体时,有时更新数据,有时不更新。完全相同的请求第一次不起作用,但第二次会起作用。我使用save()进行更新和插入。插入时一切正常 以下是我的代码(使用NestJS键入表单): ==>实体 @Entity() export class User { @ObjectIdColumn() @Type(() => String) id: ObjectID; @Column()
@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);
}
==>用户服务:
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);
}
从“typeorm”导入{MongoRepository};
...
私有只读用户存储库:MongoRepository
...
异步更新(userId:string,dto:UpdateUserDto):承诺{
const user=wait this.userRepository.findOneOrFail(userId);
user.address=dto.address;
返回wait this.userRepository.save(user);
}
当我在save()之后找到()时,我的用户地址没有更新,而我从Mongo收到了modifiedCount 1。
如果我重复这个请求,这一次它是有效的
有什么想法吗?几个月后,我终于明白了 在我的nodejsauth中间件中,我记录了一个时间戳来存储用户最后一次连接到API的时间。这意味着我使用了save()两次:在中间件和我的服务中!有时它是有效的,因为保存时间戳足够快,可以让我的服务保存更新,有时则不行。我没有使用save(),而是将updateOne()与$set一起使用,不再存在并发问题 我回答自己的问题,希望这对别人有帮助