如何在猫鼬(打字稿)中获取模型的_id

Posted

技术标签:

【中文标题】如何在猫鼬(打字稿)中获取模型的_id【英文标题】:How to get _id of Models in Mongoose (Typescript) 【发布时间】:2021-11-11 05:07:36 【问题描述】:

我正在使用 Mongoose 为 mongodb 对象建模(node.js / nestJS)

目标

我希望暴露 POJO 中对象的 _id(由 MongoDB 自动创建)。因为我需要它们在客户端进行一些操作。 (识别相同的对象,...)

我尝试了什么

export type GroupDocument = Group & Document;

@Schema()
export class Group 
    @Prop( required: true )
    name: string;

鉴于上面的代码,我可以在使用时访问_id

const group: GroupDocument = this.findOne();

这很好。在大多数情况下,我不想使用整个GroupDocument 对象,因为它有很多开销,建议尽可能使用LeanDocuments。但是当我在 GroupDocument 上调用 .lean() 时,_id 会丢失,我无法再访问它。

const group: = this.findOne().lean();

如果我像这样从 Documents 扩展我的组,它会起作用:

Group extends Document

但猫鼬不建议这样做

我也想过像这样将 _id 放入 POJO:

@Schema()
export class Group 

    _id: string;

    @Prop( required: true )
    name: string;

但这在我看来不是一个理想的解决方案。

我想做的就是让在一个瘦对象上调用group.id / group._id 成为可能。有什么方法可以在不损害任何最佳实践的情况下实现这一目标?

【问题讨论】:

我认为您也可以在创建模型时获取对象的 id 【参考方案1】:

您必须将_id定义为:

import  Schema  from 'mongoose';
_id: Schema.Types.ObjectId

要仅返回 '_id' 字段,您可以在数据库中使用 project 并返回 _id 字段

【讨论】:

以上是关于如何在猫鼬(打字稿)中获取模型的_id的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬模型中自动增加字段值[重复]

如何在猫鼬中更新嵌套数组值

如何在猫鼬中获取 NumberLong 记录

如何在猫鼬中填充模型

使用打字稿创建猫鼬模型 - 子文档

如何在猫鼬中转换为字符串?