mongodb 不显示嵌入对象_id

mongodb does not show embedded object _id

首先注意:我正在使用@nestjs/mongoose,我不知道问题是因为@nestjs/mongoose还是纯粹的mongodb.

我想使用@nestjs/mongoose 访问嵌入文档的_id。 但是 mongoose 文档对象不包含嵌入文档的 _id。

在我的上下文中,类别嵌入在主题中。 我想访问类别的 _id。

“主题”定义:


import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
import { CategorySchema, Category } from './category.schema';

export type TopicDocument = Topic & Document;

@Schema()
export class Topic {
  @Prop()
  name: string;

  @Prop({ type: [CategorySchema] })
  categories: Category[];
}
export const TopicSchema = SchemaFactory.createForClass(Topic);

“类别”定义:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
import { Activity, ActivitySchema } from './activity.schema';

export type CategoryDocument = Category & Document;

@Schema()
export class Category {
  @Prop({ _id: true })
  _id: number;
  @Prop()
  name: string;

  @Prop()
  image: string;

  @Prop({ type: [ActivitySchema] })
  activities: Activity[];
}

export const CategorySchema = SchemaFactory.createForClass(Category);

当我运行这个:

const topics: Topic[] = await this.topicModel.find({ _id: topicId }).exec();

这是预期的结果:

然而这是结果:(不包含嵌入文档的 _id)

有解决办法吗?

旁注: 我能够使用 lean() 而不是 exec() 获取嵌入式文档的 _id, lean() returns JS 对象。但是,由于它的 JS 对象,它不会让我使用 save()

已解决!

看来我必须扩展 Document for id。
添加 id 作为 Prop 是一个错误的覆盖选项。

@Schema()
export class Category extends Document {
  @Prop()
  name: string;

  @Prop()
  image: string;

  @Prop({ type: [ActivitySchema] })
  activities: Activity[];
}