Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js TypeORM MongoDB存储库赢得';不要每次都储蓄_Node.js_Mongodb_Nestjs_Typeorm - Fatal编程技术网

Node.js TypeORM MongoDB存储库赢得';不要每次都储蓄

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()

我与TypeORM和MongoDB打交道。我从几个月前开始使用这个图书馆,但我有一个不寻常的问题

保存实体时,有时更新数据,有时不更新。完全相同的请求第一次不起作用,但第二次会起作用。我使用save()进行更新和插入。插入时一切正常

以下是我的代码(使用NestJS键入表单):

==>实体

@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一起使用,不再存在并发问题

我回答自己的问题,希望这对别人有帮助