gpt4 book ai didi

graphql - 将多个查询的结果合并到一个数组中

转载 作者:行者123 更新时间:2023-12-02 15:18:37 25 4
gpt4 key购买 nike

我正在使用 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"
}
]
}
}

最佳答案

您想要研究使用接口(interface),这里是一个(稍微丰富的)架构定义的示例:

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
}
}
}

搜索的解析器将负责调用所有不同的集合并将结果聚合到单个数组中。比这更深入的是特定于实现的,但无论您使用哪种 GraphQL 实现,都应该有使用接口(interface)(和联合,类似)的文档。

__typename字段告诉你返回对象的具体类型,从而让前端代码执行适当的显示逻辑。

关于graphql - 将多个查询的结果合并到一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48867861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com