Property
Default usage
Below is the simplest property definition.
@Definition()
export class Tag {
@Property()
name: string;
}It is equivalent to:
@Prop()or@Prop({ type: String })with@nest/mongoose.@Field()or@Field(() => graphql.GraphQLString)with@nestjs/graphql.
By default, name is required on CreateInputType and OutputType but is nullable on UpdateInputType.
Custom GraphQL type
Override inferred type
We can specify a custom GraphQL type.
@Definition()
export class Product {
@Property({ type: () => graphql.GraphQLInt })
saleCount: number;
}Different GraphQL types for each purpose
We can have different types with different options for CreateInputType, UpdateInputType and OutputType.
The options on top level will be the default options for all types, and the options on create, update and output will override the default options for the corresponding type.
@Definition()
export class Product {
@Id()
id: ObjectId;
@Property({
type: () => graphql.GraphQLInt,
create: { defaultValue: 0 },
output: { nullable: true, type: () => graphql.GraphQLFloat },
update: Skip,
})
saleCount: number;
}Skip is imported from 'dryerjs',
if you put Skip on create update or output the property will not be generated for the corresponding type.
Custom Mongoose type
By giving db field on @Property we can specify a custom Mongoose type and its options.
@Definition()
export class User {
@Property({ db: { unique: true } })
email: string;
@Property({ db: { type: Date } })
createdAt: Date;
}You can also skip the db field by giving db: Skip so that it will ignored by the database.