我有一个带有项目的GraphQL模式,每个项目都有关联的接口。我能够通过项目编号的@key来查询它。但是现在,我无法获得与项目关联的项目。这里是一些信息:
我的GraphQL模式:
type Project
@model @key(fields: ["project_number"])
{
project_number: String!
name: String!
architect: String!
interfaces: [Interface] @connection(name: "ProjectInterfaces")
}
type Interface
@model
{
id: ID!
interface_name: String!
version: String!
release: String!
project: Project @connection(name: "ProjectInterfaces")
}
这是我进行的查询:
query GetProject {
getProject(project_number:"P100") {
project_number
name
architect
interfaces{
items{
id
interface_name
}
}
}
}
在我使用上面没有密钥的模式作为project_number之前,我为项目使用了id:ID!
之类的东西。这样,我就可以使用相同的查询,并获得具有该ID的关联项目。但是,既然我使用了project_number的密钥,它将不允许我返回关联的项目。也许这是一个架构问题?我当时以为这可能是解决程序问题,但我在解决程序中玩耍,似乎没有任何效果。有关解析器的背景。我相信这是由于interfaceTable解析器。这是它自动生成的代码。我不知道该怎么解决。
#set( $limit = $util.defaultIfNull($context.args.limit, 10) )
#set( $query = {
"expression": "#connectionAttribute = :connectionAttribute",
"expressionNames": {
"#connectionAttribute": "interfaceProjectId"
},
"expressionValues": {
":connectionAttribute": {
"S": "$context.source.id"
}
}
} )
{
"version": "2017-02-28",
"operation": "Query",
"query": $util.toJson($query),
"scanIndexForward": #if( $context.args.sortDirection )
#if( $context.args.sortDirection == "ASC" )
true
#else
false
#end
#else
true
#end,
"filter": #if( $context.args.filter )
$util.transform.toDynamoDBFilterExpression($ctx.args.filter)
#else
null
#end,
"limit": $limit,
"nextToken": #if( $context.args.nextToken )
"$context.args.nextToken"
#else
null
#end,
"index": "gsi-ProjectInterfaces"
}
我目前还为接口表提供了一个gsi索引,称为“ gsi-ProjectInterfaces”
请让我知道大家都认为可能是问题所在!谢谢!
答案 0 :(得分:0)
解决您问题的一种方法是再次删除@key
指令。
然后使用listProjects
进行查询并按project_name
进行过滤。
query listProjects {
listProjects(filter: {
project_number:{
eq: "some-number"
}
}) {
project_number
name
architect
interfaces{
items{
id
interface_name
}
}
}
}
从本质上讲,这只是一项查询。尽管效率低一些,但这取决于项目的大小可能不是问题。 (使它工作,使其正确,使其快速->快最后一个?)