title: Virtual populated fields won't serialize in a type-graphql resolver
body: <p>Stack - Type-graphql with Typegoose</p>
  <p>Problem :</p>
  <ol>
  <li>BookRecommendation class resolves a book (virtual field)</li>
  <li>Typegoose returns the correct populated value for book which is resolved through bookId foreign ref</li>
  <li>The serialized type-graphql response doesn't include book object and have tried all ways to figure that out.</li>
  </ol>
  <p>What is the correct way to serialize the book object?</p>
  <pre><code>@ObjectType()
  export class BookRecommendation {
    @Field()
    readonly _id!: ObjectId;
  
    @prop() @Field(() =&gt; Date)
    createdAt!: Date;
  
    @prop() @Field(() =&gt; Date)
    updatedAt!: Date;
  
    @prop() @Field()
    sourceUrl!: string;
  
    @prop() @Field()
    recommendation!: string;
  
    @prop({ref: Book, }) @Field(type =&gt; ObjectIdScalar)
    bookId!: Ref&lt;Book&gt;;
  
    @prop({ref: Influencer}) @Field(type =&gt; ObjectIdScalar)
    influencerId!: Ref&lt;Influencer&gt;;
  
    @prop({
      ref: 'Book',
      foreignField: '_id', // compare this value to the local document populate is called on
      localField: 'bookId', // compare this to the foreign document's value defined in &quot;foreignField&quot;,
      justOne: true,
    }) 
    public book: Book;
  }
  
  export const MongooseBookReco = getModelForClass(BookRecommendation, {schemaOptions : {timestamps: true, toObject : { depopulate: false, versionKey: true,  virtuals: true, getters: true } }});
  
  // Service Class
  @Service() // Dependencies injection
  export default class BookRecommendationService {
    constructor(private readonly bookRecoModel: BookRecommendationModel) {}
  
    public async getById(_id: ObjectId): Promise&lt;BookRecommendation | null&gt; {
      return MongooseBookReco.findById(_id).populate('book').exec();
    }
  
    public async find(): Promise&lt;BookRecommendation[]&gt; {
      return MongooseBookReco.find().populate('book').exec();
    }
    
    public async addBookRecommendation(data: NewBookRecommendationInput): Promise&lt;BookRecommendation&gt; {
      const newBookRecommendation = await this.bookRecoModel.create(data);
      return newBookRecommendation;
    }
  }
  
  
  // Resolver class trying to resolve the 
   @Query((returns) =&gt; BookRecommendation, {name: &quot;BookRecommendation&quot;})
    async BookRecommendation(@Arg(&quot;id&quot;) id: ObjectId) {
      const reco = await this.recoService.getById(id);
      console.log(reco);
      return reco;
    }
  
  // Console.log output of reco object above. It contains book
  {
    _id: 601e3a416f05d67955cf5477,
    sourceUrl: 'https://twitter.com/joerogan/status/276827723358404608?s=20',
    recommendation: 'Mind blowing book',
    bookId: 601e2ebbdda47174163d718d,
    influencerId: 601a362796e4c3a3650bcaf6,
    __v: 0,
    book: {
      _id: 601e2ebbdda47174163d718d,
      title: 'Sex at dawn',
      amazonUrl: 'https://www.amazon.com/dp/0061707813?tag=mostrecommendedbooks-20&amp;geniuslink=true',
      __v: 0
    },
    id: '601e3a416f05d67955cf5477'
  }
  
  
  // Client graphl query the trigger above code
  query {
    BookRecommendation(id: &quot;601e3a416f05d67955cf5477&quot;) {
      recommendation
      _id
      bookId
      influencerId
      
    }
  }
  
  
  // Graph QL serialized output at client misses book object
  
  {
    &quot;data&quot;: {
      &quot;BookRecommendation&quot;: {
        &quot;recommendation&quot;: &quot;Mind blowing book&quot;,
        &quot;_id&quot;: &quot;601e3a416f05d67955cf5477&quot;,
        &quot;bookId&quot;: &quot;601e2ebbdda47174163d718d&quot;,
        &quot;influencerId&quot;: &quot;601a362796e4c3a3650bcaf6&quot;
      }
    }
  }
  </code></pre>