我正在使用graphQL通过组合查询来跨多个mongoDB集合和API执行搜索。所有查询都返回
的结果类型{
_id: string;
name: string;
type: string;
}
有没有办法将数据压缩成单个数组?
综合查询示例:
query searchAll {
books(input: {text: "e"}) {
_id
name
type
}
magazines(input: {text: "e"}) {
_id
name
type
}
}
目前响应如下:
{"data": {
"books": [
{
"_id": "5a8ac759c25b7235ffdc6888",
"name": "someBook",
"type": "book"
}
],
"magazines": [
{
"_id": "5a87005bc25b7235ffdc4bdf",
"name": "someMagazine-1",
"type": "magazine"
},
{
"_id": "5a870067c25b7235ffdc4be4",
"name": "someMagazine-2",
"type": "client"
}
]
}
}
期望的回复:
{"data": {
"results": [
{
"_id": "5a8ac759c25b7235ffdc6888",
"name": "someBook",
"type": "book"
},
{
"_id": "5a87005bc25b7235ffdc4bdf",
"name": "someMagazine-1",
"type": "magazine"
},
{
"_id": "5a870067c25b7235ffdc4be4",
"name": "someMagazine-2",
"type": "client"
}
]
}
}
答案 0 :(得分:3)
您希望了解如何使用接口,这是一个(略微更丰富)架构定义的示例:
interface Searchable {
id: ID!
name: String!
}
type Book implements Searchable {
id: ID!
name: String!
author: Author!
publisher: Publisher!
isbn: String!
}
type Magazine implements Searchable {
id: ID!
name: String!
publisher: Publisher!
issn: String!
}
input SearchInput {
text: String!
}
type Query {
search(input: SearchInput!): [Searchable!]!
}
以下是您查询它的方式:
query searchAll {
search(input: {text: "e"}) {
__typename
id
name
... on Book {
author
isbn
}
... on Magazine {
issn
}
}
}
search
的解析器将负责调用所有不同的集合并将结果聚合到一个数组中。比这更深入的是特定于实现的,但是在您使用的任何GraphQL实现中都应该有使用接口(和类似的联合)的文档。
__typename
字段告诉您返回对象的具体类型,从而让前端代码执行适当的显示逻辑。