【问题标题】:Fill model with fields from document用文档中的字段填充模型
【发布时间】:2021-05-19 13:23:55
【问题描述】:

我有一些 mongo 集合 Cats 有很多字段:

[{
_id: 'ObjectId'
param1: 'param1',
param2: 'param2'
}]

我有 nestjs 应用程序,我将架构定义为:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

export type CatDocument = Cat & Document;

@Schema()
export class Cat {
  @Prop()
  param1: string;
}

export const CatSchema = SchemaFactory.createForClass(Cat);

CatService 中的某些软件...

  async findAll(): Promise<Cat[]> {
    return this.catModel.find().exec();
  }

当我尝试控制台记录请求的结果时,我得到了所有字段,例如:

[{
_id: 'ObjectId'
param1: 'param1',
param2: 'param2'
}]

问:我怎样才能获得只有我的架构定义字段的 json? toJSON 变换?

【问题讨论】:

    标签: mongoose nestjs


    【解决方案1】:

    find 的结果是一个数组,你应该使用lean()

    this.catModel.find({},"-_id -__v").lean()
    

    但对于findOnefindById,您可以使用toObject()toJson(),因为结果是一个对象

    this.catModel.findById(catID,"-_id -__v").toObject
    
    

    【讨论】:

      【解决方案2】:
      @Schema({
        versionKey: false,
        toJSON: {
          transform: (doc: Document<Cat>, ret) => {
            ret = Object.assign(
              {},
              ...Object.keys(CatSchema.paths).map((key) => {
                return { [key]: ret[key] };
              }),
            );
            delete ret._id;
            delete ret.__v;
            return ret;
          },
        },
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2020-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-05
        相关资源
        最近更新 更多