【问题标题】:How to define mongoose _id in TypeScript interface?如何在 TypeScript 界面中定义 mongoose _id?
【发布时间】:2019-07-11 14:40:59
【问题描述】:

我正在使用带有接口+class+schema approach 的 Mongoose 和 TypeScript。

存储_id 字段的规范方法是什么?

我知道数据库将其存储为 bson ObjectID。但是我已经看到一些使用string 的示例和其他使用猫鼬的ObjectId 的示例,然后由于各种原因在它们之间进行转换 - 所以我不确定该使用哪个。

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

是否建议使用

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

另外,假设使用 objectid 是正确的——我想避免在接口文件中依赖 mongoose。改用 bson 包的 ObjectID 是否安全/可取 - 它们是否等效?

【问题讨论】:

    标签: node.js typescript mongoose


    【解决方案1】:

    您可以使用mongoose.Document 扩展您的界面。你的界面就来了

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

    用法:

    export let AnimalSchema = mongoose.model<Animal>('animal', schema, 'animals');
    let animal = await AnimalSchema.find({_id: "id"}).exec();
    // animal._id / animal.name
    

    【讨论】:

    • 我这样做another way 是为了让我的实体文件不依赖于基础设施。另外,最初的问题是什么 - 最好使用哪种类型?
    • aww,我认为mongoose.Types.ObjectId 对你有好处,mongoose.Types.ObjectId 已由typeof mongodb.ObjectID &amp; { (s?: string | number): mongodb.ObjectID; }; 定义
    【解决方案2】:

    你可以这样做

    import { ObjectId } from 'mongoose';
    interface Animal {
      _id: ObjectId       
      name: string
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-26
      • 2016-10-21
      • 2020-01-10
      • 2021-12-19
      • 2019-07-31
      • 2019-02-09
      • 2019-04-15
      • 2021-08-14
      相关资源
      最近更新 更多