如何从graphql查询获取数组或列表?

时间:2019-06-10 19:09:17

标签: mongodb graphql-js

你好,我是graphql的新手,我想知道是否有可能在我的架构中创建一个根查询,该查询将返回一个数组或列表。

更准确地说,我在架构中创建了以下类型:

const ResourceType = new GraphQLObjectType({
  name:'Resource',
  fields:()=>({
   id: {type: GraphQLID},
   url: {type: GraphQLString},
   title: {type: GraphQLString},
   author: {type: GraphQLString},
   license:{type: GraphQLString},
   LicenseScore: {type: GraphQLFloat},
 })
});

我想查询数据库中的所有资源,以便获得它们的许可证类型,然后根据许可证分配分数。是否有可能获取每个资源的许可证并返回如下数组的查询:[[id:1209,score:3.5],[1203,4.5] ....]?

我创建了一个将分数更新到数据库的突变,这里是:

updateAllLicenses: {
     type: new GraphQLList(ResourceType),
     async resolve(parent,args){
     var licns;
     var scr;
     await Resource.find({}).then(async function(results){
       var num = results.length;
       var scr=0;
       for (var i=0; i<num; i++){
         if (! (results[i].license in licenseScores)){
           scr = 0;
         }
         else{
           scr = licenseScores[results[i].license];
         }
         await Resource.findByIdAndUpdate(results[i].id{LicenseScore:scr});
        }
      });
      return await Resource.find({});
    }
   }

但是,我想知道是否有一种方法可以直接从查询中获取这些分数,而不是将其保存在数据库中。我尝试将类型更改为新的GraphQLList(GraphQLFloat)并返回具有scr值的数组,但是在graphql api中收到错误消息,说我突变中的输出类型错误。

1 个答案:

答案 0 :(得分:0)

在您的模式中,在我看来,您能够以对象数组的形式获取结果,如下所示:

[
    {
        id: 1,
        license: "value1"
    },
    {
        id: 2,
        license: "value2"
    }
]

如果这是您所需要的,那么近似查询应该可以工作:

query Resource {
    id
    url
    license
    licenseScore
}

一旦有了对象数组,就可以将其转换为数组数组,尽管我不建议这样做。

由于您刚刚开始使用GraphQL,因此我推荐以下资源:

  • HowToGraphql:在GraphQL上干净的视频/帖子
  • Apollo Graphql的文档和博客。这是queries
  • 上的帖子之一

此外,如果您想测试查询并习惯查询,请使用GraphQL Playground