Nest Js,如何在架构中正确设置 _id 属性

问题描述 投票:0回答:3

我知道这看起来很基本,但我似乎找不到在 Nest.js 猫鼬模式中设置 _id 字段的正确方法。 我附上了一张图片,只是想知道设置此属性的最佳方法是什么?我收到以下错误

“SchemaType”仅指类型,但被用作命名空间 这里.ts(2702)

node.js mongoose nestjs
3个回答
5
投票

您不需要将

_id
定义为 prop,因为它已经存在于
Document
类中。对
MusicSupervisorModel
执行的查询将返回
MusicSupervisorDocument
的对象。如果您想将
ObjectId
类型的字段添加到您的架构中,您必须按如下方式进行操作以保留对
ObjectId
的转换:

import { Document, SchemaTypes, Types } from 'mongoose';

...

@Prop({ type: SchemaTypes.ObjectId })
yourField: Types.ObjectId

1
投票

在 NestJS 中定义 Mongoose 架构时,您实际上不必指定 _id 字段,一切都会好起来的。

如果你想明确定义它,你必须使用以下内容:

...

 _id: Schema.Types.ObjectId

...

0
投票

聚会有点晚了,我没有严格回答这个问题,但这可能对某些人仍然有帮助。这是对 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; }

© www.soinside.com 2019 - 2024. All rights reserved.