我是GraphQL的新手,正在尝试学习在MongoDB中使用它的最佳方法。 GraphQL具有定义类型之间关系的方法,如下所示:
type Booking {
id: ID!
date: String!
author: [User!]!
event: [Event!]!
}
但是,MongoDB还可以通过以下方式定义文档之间的引用:
event: {
type: Schema.Types.ObjectId,
ref: 'Event'
},
author: {
type: Schema.Types.ObjectId,
ref: 'User'
}
如果我想检索预订的作者,则可以在解析器中的GraphQL端执行搜索,如下所示:
Booking: {
author(parent, args, ctx, info) {
return users.filter(user => {
return user.id === parent.author;
})
}
},
或者我可以对结果使用MongoDB find()
方法,从解析器中的Booking.find()
查找作者,如下所示:
bookings: async () => {
try {
const bookings = await Booking.find();
return bookings.map(booking => {
return //perform MongoDB find() here to get the authors using the references
});
} catch (err) {
throw err;
}
我的问题是,是否有必要在GraphQL端和MongoDB端定义数据之间的关系?上面提到的两种方法中哪一种是检索关系数据的更好方法?