0

I have followed NestJS mongo docs to create a schema (without ID) from a regular class. Since this class has other general uses (unrelated to mongoose), I would like to have regular methods on that class as well:

@Schema({ _id: false })
export class Location {
  @Prop()
  lat: number;
  @Prop()
  lon: number;
  regularMethod() { return something based on this.lat, this.lon }
}
export const LocationSchema = SchemaFactory.createForClass(Location);

export type CatDocument = HydratedDocument<Cat>;
@Schema()
export class Cat {
  @Prop({ type: [LocationSchema] })
  locations: Location[];
}
export const CatSchema = SchemaFactory.createForClass(Cat);

The problem is that if I query such an object from the db, regularMethod doesn't exist since the queried object is actually a Document based on Location, rather than Location. The document only exposes methods that were defined by the schema.methods, which is not what I need.

MyService {
    constructor(@InjectModel(Cat.name) catModel: Model<CatDocument>) {}
    async findLocations(catId: string) {
        const cat = await catModel.findOneById(catId);
        cat.location.forEach(loc => loc.regularMethod()) // no such method
    }
}

Is there some obvious way to "cast" Location to the original class to have access to those methods?

Sagi Mann
  • 2,967
  • 6
  • 39
  • 72

0 Answers0