嵌套对象的模式/解析 graphql/mongoose

Posted

技术标签:

【中文标题】嵌套对象的模式/解析 graphql/mongoose【英文标题】:Schema/Resolve for nested objects graphql/mongoose 【发布时间】:2019-12-21 16:51:29 【问题描述】:

我正在使用带有 mongoose 的 graphql,并且我正在尝试以这种形式的 json 访问嵌套对象数组:

"Plans": [

  "id": ...
  "name": ...
  "frequency": ...
  "lastExecuted": ...
  "Steps": 
    "Step": [
    
      "id": ...
      "shortDescription": ...
      "description": ...
      ...
    ,
    ...],

我创建了一个猫鼬模型:

const PlanModel = Mongoose.model("Plan", 
  name: String,
  frequency: GraphQLString,
  lastExecuted: String,
  Steps: []
)

直觉上我会在数组中插入我的 Stepmodel,但这给了我一个错误。

所以我尝试使用解析器填充数组:

    Plans: 
  type: GraphQLList(PlanType),
  args: getGraphQLQueryArgs(PlanType),
  resolve: (root, args, context, info) => 
    return PlanModel
    .find()
    .populate("Steps")
    .populate("Steps.Step")
    .exec();
  
,

这是我的计划类型:

const PlanType = new GraphQLObjectType(
  name: 'Plan',
  fields: () => (
    id: 
      type: GraphQLID
    ,
    name: 
      type: GraphQLString
    ,
    frequency: 
      type: GraphQLString
    ,
    lastExecuted: 
      type: GraphQLString
    ,
    maintenanceSteps: 
      type: GraphQLList(StepType)
    ,
  )
)

在这种情况下,我的 GraphQL 查询返回一个空数组。我知道这是一个常见问题,但我找不到任何解决我的问题的方法

【问题讨论】:

【参考方案1】:

我的问题的解决方案是添加另一种类型:

const StepsType = new GraphQLObjectType(
  name: 'Steps',
  fields: () => (
    Step: 
      type: GraphQLList(StepType)
    
  )
)

const PlanType = new GraphQLObjectType(
  name: 'Plan',
  fields: () => (
    _id: 
      type: GraphQLID
    ,
    id: 
      type: GraphQLString
    ,
    name: 
      type: GraphQLString
    ,
    frequency: 
      type: GraphQLString
    ,
    lastExecuted: 
      type: GraphQLString
    ,
    status: 
      type: GraphQLString
    ,
    Steps: 
      type: StepsType
    ,
  )
)

【讨论】:

以上是关于嵌套对象的模式/解析 graphql/mongoose的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyspark 解析 JSON 时嵌套动态模式不起作用

GraphQL 无法解析嵌套对象属性

解析 Json 数据。嵌套对象给出错误

在 Android 中解析嵌套的 JSON 对象

在 Apollo GraphQL 中跨本地和远程模式的嵌套数组中建模数据的最佳方法?

在 Swift 4 中使用对象映射器解析嵌套对象