mongodb - 如何从 graphql 查询中获取数组或列表?
问题描述
您好,我是 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({});
}
}
但是我想知道是否有办法直接从查询中获取这些分数,而不是将它们保存在数据库中。我尝试将类型更改为 new GraphQLList(GraphQLFloat) 并返回一个包含 scr 值的数组,但我在 graphql api 中收到一个错误,说我的突变中有错误的输出类型。
解决方案
从您的架构中,在我看来,您能够以对象数组的形式获取结果,输出如下:
[
{
id: 1,
license: "value1"
},
{
id: 2,
license: "value2"
}
]
如果这就是您所需要的,那么近似查询应该可以工作:
query Resource {
id
url
license
licenseScore
}
一旦有了对象数组,就可以将其转换为数组数组,尽管我不建议这样做。
由于您刚刚开始使用 GraphQL,因此我推荐了以下资源:
- HowToGraphql:在 GraphQL 上清理视频/帖子
- Apollo Graphql 的文档和博客。这是关于查询的帖子之一
此外,如果您想测试查询并习惯它们,请使用GraphQL Playground
推荐阅读
- hyperledger-composer - Hyperleger Composer Playground 错误
- javascript - 如何让我的 Javascript 代码选择页面上的所有“b”标签,而不是只选择第一个?
- python - 如何解决“返回”外部函数错误
- visual-studio - VSTS - 从解决方案构建许多项目之一
- c# - 如何在没有任何框架的情况下将 json 文件转换为字典 c#。.Net 3.5
- r - 使用 R 查找字符串中字符的位置并将数据向左拉
- excel - 将分隔字符串写入工作表 Excel VBA
- amazon-web-services - 我打算使用 terraform 创建 3 个 aws_vpc 和对等互连
- vue.js - 当我使用 ElementUI 的树组件时“无法生成渲染功能”
- python - 更正序列发生器的起始编号?