【发布时间】:2019-03-11 02:39:53
【问题描述】:
为了执行类似连接的操作,我们可以同时使用 GraphQL 和 Mongoose 来实现该目的。
在问任何问题之前,我想给出以下任务/活动示例(此代码均未经过测试,只是为了示例而给出):
Task {
_id,
title,
description,
activities: [{ //Of Activity Type
_id,
title
}]
}
在 mongoose 中,我们可以使用 populate 方法检索与任务相关的活动,如下所示:
const task = await TaskModel.findbyId(taskId).populate('activities');
使用 GraphQL 和 Dataloader,我们可以得到相同的结果:
const DataLoader = require('dataloader');
const getActivitiesByTask = (taskId) => await ActivityModel.find({task: taskId});
const dataloaders = () => ({
activitiesByTask: new DataLoader(getActivitiesByTask),
});
// ...
// SET The dataloader in the context
// ...
//------------------------------------------
// In another file
const resolvers = {
Query: {
Task: (_, { id }) => await TaskModel.findbyId(id),
},
Task: {
activities: (task, _, context) => context.dataloaders.activitiesByTask.load(task._id),
},
};
我试图查看是否有任何文章证明了哪种方法在性能、资源耗尽等方面更好,但我没有找到这两种方法的任何比较。
任何见解都会有所帮助,谢谢!
【问题讨论】:
-
我不得不认为它们或多或少是相同的。您可能需要担心更重要的事情。
-
感谢您的评论。是的,你是对的,当然还有很多其他方面需要关心。对于之前的方法,您有没有具体的改进或者更好的方法?
标签: node.js express mongoose graphql