Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to define mongoose _id in TypeScript interface?

I'm using Mongoose and TypeScript with the interface+class+schema approach.

What is the canonical way to store the _id field?

I know the db stores it as a bson ObjectID. But I've seen some examples using string and others using mongoose's ObjectId, and then converting between them for various reasons - so I'm unsure which to use.

interface Animal {
  _id: ?type?;        // ?
  name: string;
}

Is it advisable to use

  • string
  • mongoose.Types.ObjectId
  • mongodb.ObjectID
  • bson.ObjectID

Also, assuming it is correct to use objectid - I want to avoid taking a dependency on mongoose in the interface file. Is it safe/advisable to use the bson package's ObjectID instead - are they equivalent?

like image 656
lonix Avatar asked Feb 18 '19 08:02

lonix


2 Answers

you can do this

import { ObjectId } from 'mongoose';
interface Animal {
  _id: ObjectId       
  name: string
}
like image 161
kadiro Avatar answered Oct 03 '22 00:10

kadiro


You can extend your interface with mongoose.Document. Your interface will be come

interface Animal extends mongoose.Document { 
  name: string;
}

Usage:

export let AnimalSchema = mongoose.model<Animal>('animal', schema, 'animals');
let animal = await AnimalSchema.find({_id: "id"}).exec();
// animal._id / animal.name
like image 45
hoangdv Avatar answered Oct 02 '22 23:10

hoangdv