如何在 TypeScript 接口中定义 mongoose _id?

lon*_*nix 8 mongoose node.js typescript

我将 Mongoose 和 TypeScript 与 interface+ class +schema方法一起使用

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

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

interface Animal {
  _id: ?type?;        // ?
  name: string;
}
Run Code Online (Sandbox Code Playgroud)

是否建议使用

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

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

kad*_*iro 23

你可以这样做

import { Types } from 'mongoose';
interface Animal {
  _id: Types.ObjectId,      
  name: string
}
Run Code Online (Sandbox Code Playgroud)

  • 这是错误的,ObjectId 指的是 Schema.Types.ObjectId,你想要 `import {Types} from 'mongoose'; _id:类型.对象`。 (4认同)

Sir*_*hau 11

摘自猫鼬文档

  • Types从猫鼬导入
  • 使用此类型为您_id
import { Types } from 'mongoose';

interface Animal {
  _id: Types.ObjectId;
  name: string;
}
Run Code Online (Sandbox Code Playgroud)


hoa*_*gdv 5

您可以使用mongoose.Document. 你的界面会来

interface Animal extends mongoose.Document { 
  name: string;
}
Run Code Online (Sandbox Code Playgroud)

用法:

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

  • 哇,我认为`mongoose.Types.ObjectId` 适合你的情况,`mongoose.Types.ObjectId` 已经由`typeof mongodb.ObjectID &amp; { (s?: string | number): mongodb.ObjectID; 定义;};` (7认同)
  • https://mongoosejs.com/docs/typescript.html#using-extends-document - *我们**强烈**建议不要使用这种方法,它的支持将在下一个主要版本中删除,因为它会导致重大性能问题。许多 Mongoose TypeScript 代码库使用以下方法。* (3认同)