Mongoose/NestJ无法访问createdAt,即使{timestamps:真}

tquggr8v  于 2023-03-30  发布在  Go
关注(0)|答案(2)|浏览(91)

我目前正在使用Mongoose和NestJs,我在访问createdAt属性时遇到了一些困难。
这是我的user.schema.ts

@Schema({ timestamps: true})
export class User {
  @Prop({ required: true })
  name!: string;

  @Prop({ required: true })
  email!: string;
}

export const UserSchema = SchemaFactory.createForClass(User);

在我的user.service.ts中

public async getUser(
    id: string,
  ): Promise<User> {
    const user = await this.userModel.findOne({ id });

    if (!user) {
      throw new NotFoundException();
    }

    console.log(user.createdAt) // Property 'createdAt' does not exist on type 'User' .ts(2339)
  }

所以基本上我已经将时间戳设置为true,但我仍然无法访问createdAt属性。顺便说一下,我还有一个自定义id,它工作正常,所以请在我的服务中忽略它。ts
我已经尝试将@Prop() createdAt?: Date设置为模式,但仍然不起作用。
我还使用MongoMemoryServer和Jest测试了这个模式,结果显示它返回createdAt。
任何帮助,为什么我不能访问createdAt属性将不胜感激!

093gszye

093gszye1#

我用这个做了测试:

@Schema({ timestamps: true })

然后,我在我的模型/实体中添加了2个字段(createdAt,updatedAt),以在NestJS的控制器/解析器中公开。

@Prop()
  @Field(() => Date, { description: 'Created At' })
  createdAt?: Date

  @Prop()
  @Field(() => Date, { description: 'Updated At' })
  updatedAt?: Date

最后一个例子:

import { ObjectType, Field } from '@nestjs/graphql'
import { Schema as MongooseSchema } from 'mongoose'
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'
@Schema({ timestamps: true })
@ObjectType()
export class Post {
  @Field(() => String)
  _id: MongooseSchema.Types.ObjectId
  @Prop()
  @Field(() => String, { description: 'Post Body ' })
  body: string

  @Prop()
  @Field(() => Date, { description: 'Created At' })
  createdAt?: Date

  @Prop()
  @Field(() => Date, { description: 'Updated At' })
  updatedAt?: Date
}

export const PostSchema = SchemaFactory.createForClass(Post)

现在,我的新字段createdAt、updatedAt可用:

sauutmhj

sauutmhj2#

我测试了你的代码,添加@Prop() createdAt?: Date应该可以访问createdAt
我从您的代码中发现的唯一不能访问createdAt的地方是您传递给查询的id

public async getUser(
    id: string,
): Promise<User> {
    const user = await this.userModel.findOne({ _id: id });

    if (!user) {
      throw new NotFoundException();
    }

    console.log(user.createdAt)
}

下面是我使用你的代码进行测试的截图:

相关问题