我知道这看起来很基本,但我似乎找不到在 Nest.js 猫鼬模式中设置 _id 字段的正确方法。 我附上了一张图片,只是想知道设置此属性的最佳方法是什么?我收到以下错误
“SchemaType”仅指类型,但被用作命名空间 这里.ts(2702)
您不需要将
_id
定义为 prop,因为它已经存在于 Document
类中。对 MusicSupervisorModel
执行的查询将返回 MusicSupervisorDocument
的对象。如果您想将 ObjectId
类型的字段添加到您的架构中,您必须按如下方式进行操作以保留对 ObjectId
的转换:
import { Document, SchemaTypes, Types } from 'mongoose';
...
@Prop({ type: SchemaTypes.ObjectId })
yourField: Types.ObjectId
在 NestJS 中定义 Mongoose 架构时,您实际上不必指定 _id 字段,一切都会好起来的。
如果你想明确定义它,你必须使用以下内容:
...
_id: Schema.Types.ObjectId
...
聚会有点晚了,我没有严格回答这个问题,但这可能对某些人仍然有帮助。这是对 Tornike Menabde 评论的回应。
您可以使用 mongoose 包中的
HydratedDocument
类型来访问 mongoose 或 mongo 自动添加的属性,即 _id
。
import { Schema } from '@nestjs/mongoose';
import { HydratedDocument } from 'mongoose';
export type UserDocument = HydratedDocument<User>;
@Schema()
export class User {
// no _id field required here
}
import { Injectable } from '@nestjs/common';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { User, UserDocument } from './schemas/user.schema';
@Injectable()
export class UserService {
constructor(@InjectModel(User.name) private userModel: Model<User>) {}
async findUserById(id: string): Promise<any> {
return this.userModel.findOne((user: UserDocument) => user._id.toString() === id).exec();
}
}
UserDocument 类型如下所示:
type UserDocument = Document<unknown, {}, User> & User & { _id: Types.ObjectId; }