chr*_*ian 3 graphql graphql-js
我正在使用 graphQL 通过组合查询在多个 mongoDB 集合和 API 之间执行搜索。所有查询都返回结果类型
{
_id: string;
name: string;
type: string;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将数据展平成单个数组?
组合查询示例:
query searchAll {
books(input: {text: "e"}) {
_id
name
type
}
magazines(input: {text: "e"}) {
_id
name
type
}
}
Run Code Online (Sandbox Code Playgroud)
响应目前看起来像:
{"data": {
"books": [
{
"_id": "5a8ac759c25b7235ffdc6888",
"name": "someBook",
"type": "book"
}
],
"magazines": [
{
"_id": "5a87005bc25b7235ffdc4bdf",
"name": "someMagazine-1",
"type": "magazine"
},
{
"_id": "5a870067c25b7235ffdc4be4",
"name": "someMagazine-2",
"type": "client"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
期望的回应:
{"data": {
"results": [
{
"_id": "5a8ac759c25b7235ffdc6888",
"name": "someBook",
"type": "book"
},
{
"_id": "5a87005bc25b7235ffdc4bdf",
"name": "someMagazine-1",
"type": "magazine"
},
{
"_id": "5a870067c25b7235ffdc4be4",
"name": "someMagazine-2",
"type": "client"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
您想研究使用接口,这是一个(稍微丰富的)模式定义的示例:
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!]!
}
Run Code Online (Sandbox Code Playgroud)
以下是您查询它的方式:
query searchAll {
search(input: {text: "e"}) {
__typename
id
name
... on Book {
author
isbn
}
... on Magazine {
issn
}
}
}
Run Code Online (Sandbox Code Playgroud)
解析器search将负责调用所有不同的集合并将结果聚合到单个数组中。比这更深入的是实现特定的,但是应该有文档用于在您使用的任何 GraphQL 实现中使用接口(和联合,它们是相似的)。
该__typename字段告诉您返回对象的具体类型,从而让前端代码执行适当的显示逻辑。
| 归档时间: |
|
| 查看次数: |
8360 次 |
| 最近记录: |