我是将React和Apollo应用于MongoDB的新手,但我遇到以下问题:
我有一个表(ID-ID_A-ID_B),对此表进行了查询并返回了一个数组。之后,我必须在另一个表中查询Array中每个组件与ID_A的匹配情况。
所以我做了:
{this.props.firstGet.map((data, index) => {
const id = data.ID_A;
return (
<Query key={this.props.firstGet.id} query={QUERY} variables={{ id }}>
{({ loading, error, data }) => {
if (loading) return 'Loading...';
if (error) return `Error ${error.message}`;
this.test = this.test.concat({...data.getStartup, ...this.state.applicants[index]});
return(this.test.length === this.props.getApplicants.length ?
<LastTable startups={this.test}></LastTable>
: '')
}
}
</Query>
);
哪种方法最适合我的问题? 我需要每个对象带有第二个表的答案的复合数组的第一个数组。 有没有一种方法可以直接将其设置为主要状态而无需使用例如LastTable?
我如何解决: 1)添加MainTable MongoDB模式:
ID_A: {
type: mongoose.Schema.ObjectId,
ref: 'Table1'
}
2)在graphQl shcema中:ID_A:Table1Object
3)在解析程序中添加.populate('ID_A')
我现在尝试插入一个新的,也许我有问题,但是如果在MainTable ID_A字段中使用ID,则连接会很好
答案 0 :(得分:3)
这可以在graphql服务器端处理。您只需要请求解析那些相关字段并从服务器端返回即可。
例如-
1。使用字段和子字段创建架构 例如
type Person {
id: ID!
cars: [Car]
}
type Car {
id:ID!
ownerId: Int!
model: String
}
2。您需要在服务器端编写嵌套的解析器
人员解析器:
import Query from './query';
import Mutation from './mutation';
export default {
Query, //<----- person query resolver
Mutation, //<----- person mutation resolver if any
Person: { . //<----- Nested fields resolver on Person
cars: (parent, args, { dataSources }) => {
const { id: ownerId } = parent;
// return from db cars owned by person
return dataSources.carAPI.getCarsByOwnerId(ownerId);
},
},
};
我在这里使用dataSource,但是您可以直接使用数据库中的解析。
3。在客户端查询
export const GET_PERSON_WITH_CARS = gql`
query getPersonWithCars($id: ID!) {
person(id: $id) {
id
cars {
id,
ownerId,
model,
}
}
`
我希望对您有帮助