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[];
}
首先注意:我正在使用@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[];
}