NestJS + Mongoose + GraphQL:“填充”不起作用

Posted

技术标签:

【中文标题】NestJS + Mongoose + GraphQL:“填充”不起作用【英文标题】:NestJS + Mongoose + GraphQL : "populate" not working 【发布时间】:2020-02-28 04:39:37 【问题描述】:

感谢伟大的框架!

我在 GraphQL 中使用 mongoose,遇到以下问题:

如果我想使用 populate 解析存储在用户“参数”数组中的 ObjectID,在 GraphQL 中,我会使用空参数数组作为答案。

我怀疑在定义引用 ArgumentSchema(MongoDB 模式的名称)或填充 arguments(用户属性的名称)时出错。这如何正确工作?

argument.schema

export const ArgumentSchema = new mongoose.Schema(
  argument:  type: String, required: true ,
  userId:  type: String, required: true ,
  username:  type: String, required: true ,
);

user.schema

export const UserSchema = new mongoose.Schema(
  username:  type: String, required: true ,
  email:  type: String, required: true ,
  age:  type: Number, required: true ,
  arguments:  type: [mongoose.Schema.Types.ObjectId], required: false, ref: 'ArgumentSchema' ,
);

argument.model

@ObjectType()
export class ArgumentGQL 
  @Field(() => ID)
  readonly _id: string;

  @Field()
  readonly argument: string;

  @Field()
  readonly userId: string;

  @Field()
  readonly username: string;

user.model

@ObjectType()
export class UserGQL 
  @Field(() => ID)
  readonly _id: string;

  @Field()
  readonly username: string;

  @Field()
  readonly email: string;

  @Field()
  readonly age: number;

  @Field(() => [ArgumentGQL],  nullable: true )
  readonly arguments: ArgumentGQL[];

user.service

async getOne(id: string): Promise<UserGQL> 
    try 
      return await this.userModel.findById(id).populate('arguments').exec();
     catch (e) 
      throw new BadRequestException(e);
    
  

GraphlQL 查询示例

query 
  getUser(id: "5dbcaf9f5ba1eb2de93a9301") 
      _id,
      username,
      email,
      age,
      arguments 
          argument,
          username
      
  

我想我还没有理解一些基本的东西......

如果有任何帮助,我将不胜感激! 干杯

【问题讨论】:

我也有同样的问题 你有这个项目存储库吗? 【参考方案1】:

我猜是问题所在,可能是您定义user.schema 的方式。正如它提到的here,你试过这个吗?


 arguments: [ type: [mongoose.Schema.Types.ObjectId], , ref: 'ArgumentSchema' ],

【讨论】:

非常感谢先生!你为我节省了几个小时;) @stoniemahonie 不客气 :) 顺便说一句,我用的是Typegoose,我觉得它更干净一些。

以上是关于NestJS + Mongoose + GraphQL:“填充”不起作用的主要内容,如果未能解决你的问题,请参考以下文章

@nestjs/mongoose 的文档

NestJS 和 Mongoose 使用 Mongoose-Sequence

NestJs/Mongoose 中的自动增量序列

如何用 jest 在服务 (NestJS) 中测试模型 (Mongoose)

NestJS/Mongoose:序列化不排除普通输出中的属性

如何在 NestJs 和 typescript 中使用 `mongoose-delete` 插件?