简体   繁体   中英

Schema/Resolve for nested objects graphql/mongoose

I am using graphql with mongoose and I am trying to access a nested object array in a json of this form:

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

I created a mongoose model:

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

Intuitively I would insert my Stepmodel in the array, but this is giving me an error.

So I tried populating the array with the resolver:

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

This is my PlanType:

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

My GraphQL query returns an empty array in this case. I know this is a common problem, but I couldn't find any solution for my problem

The solution to my problem was adding another type:

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
    },
  })
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM