在 GraphQL 和 Apollo 中检索数组

Posted

技术标签:

【中文标题】在 GraphQL 和 Apollo 中检索数组【英文标题】:Retrieving array in GraphQL and Apollo 【发布时间】:2019-01-31 10:31:12 【问题描述】:

所以我已经使用 Graphql 和 apollo 设置了一个 api,并设法将一个字符串数组导入 mongoDB ...现在我正在使用 Apollo 查询数据以做出反应,但我似乎无法找到如何检索它一个

error:[GraphQL error]: Message: String cannot represent an array value: [pushups,situps], Location: [object Object], Path: wods,0,movements 

我的架构设置为:

   const WodType = new GraphQLObjectType(
  name: 'Wod',
  fields: () => (
    id:  type: GraphQLID ,
    name:  type: GraphQLString ,
    movements:  type: GraphQLString ,
    difficulty:  type: GraphQLString ,
    group: 
  type: GroupType,
  resolve(parent, args) 
    return Group.findById(parent.groupId);
  

) );

我的突变为:

const Mutation = new GraphQLObjectType(
  name: 'Mutation',
  fields: 
    addWod: 
      type: WodType,
  args: 
    name:  type: new GraphQLNonNull(GraphQLString) ,
    movements:  type: new GraphQLList(GraphQLString) ,
    difficulty:  type: new GraphQLNonNull(GraphQLString) ,
    groupId:  type: new GraphQLNonNull(GraphQLID) 
  ,
  resolve(parent, args) 
    let wod = new Wod(
      // Use model to create new Wod
      name: args.name,
      movements: args.movements,
      difficulty: args.difficulty,
      groupId: args.groupId
    );
    // Save to database
    return wod.save();
  

该数组是“运动”下的字符串数组...非常感谢任何有助于将其导入 React 的查询...这里是前端的当前查询...使用 Apollo Boost

const getWodsQuery = gql`
  
    wods 
      id
     name
      movements
      difficulty
    
   
 `;

【问题讨论】:

【参考方案1】:

不确定它是否仍然相关,我没有重新创建代码,但问题可能是,您返回的“运动”只是“字符串”,而不是输出对象类型 Wod 中的字符串数组。这只是基于您传递给突变的参数(即字符串列表)做出的假设。修复应该只是修改 Wood 类型如下

const WodType = new GraphQLObjectType(
  name: 'Wod',
  fields: () => (
    id:  type: GraphQLID ,
    name:  type: GraphQLString ,
    movements:  type: new GraphQLList(GraphQLString) ,
    difficulty:  type: GraphQLString ,
    group: 
  type: GroupType,
  resolve(parent, args) 
    return Group.findById(parent.groupId);
  
)

请注意,这只是我的假设,因为我不知道您的数据是如何存储的,但根据错误消息它可能是正确的。我写了一篇关于在 GraphQL 模式中实现列表/数组的文章,因为我看到很多人都在为类似的问题而苦苦挣扎。你可以在这里查看https://graphqlmastery.com/blog/graphql-list-how-to-use-arrays-in-graphql-schema

【讨论】:

以上是关于在 GraphQL 和 Apollo 中检索数组的主要内容,如果未能解决你的问题,请参考以下文章

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

apollo (graphQL) - 如何在查询中发送对象数组

React + Apollo:GraphQL 错误数组未传递到组件中

在 reactJS 中使用动态字段的 Apollo 客户端 graphql 查询

无法在单个 GraphQL 查询中组合本地和远程数据(Next.js + Apollo)

如何将对象数组粘贴到 GraphQL Apollo 缓存中?