GraphQL通过将其作为解析参数之一传递来查询数据库

时间:2017-01-21 17:26:56

标签: node.js mongodb express graphql

我对学习GraphQL很感兴趣,因此我可以构建真正的fullstack应用程序。

我正在尝试在schema中的resolve函数中查询我的mongodb。我收到了错误:

  

" message":" mongodb.getCollection不是函数"

这非常简单,我的mongodb参数没有getCollection函数,问题是我不知道为什么。我使用的是mongodb,graphqlhttp,express-graphql。

这是我的代码:

在我的 index.js 文件中:

const graphql = express();<br/> graphql.use('/', graphQLHTTP(async () => ({<br/> graphiql: true,<br/> pretty: true,<br/> schema,<br/> context: {<br/> mongodb: await mongodb<br/> }<br/> })));

在我的架构文件中,这是我的解决方案片段:
resolve: async(source, { category }, { mongodb }) => {<br/> return await {<br/> stories: mongodb.getCollection('stories').find({})<br/> };<br/> }

我现在完全陷入困境,你们知道我的代码出了什么问题吗?

2 个答案:

答案 0 :(得分:0)

尝试使用:

  resolve: (obj, args, ctx) => {
    return mongodb.getCollection('stories').find({})
  }

不用说 - 数据库的结果应与GraphQLObject类型相匹配,如:

new GraphQLList(storyType)

答案 1 :(得分:0)

首先,当您使用.find({})函数时,它通常被接受使用GraphQLList,因为它从数据库中获取所有内容,我建议您使用控制台。 log(); 更频繁。 根据我自己对graphQL的了解,resolve函数接受两个参数,父数据和你的args。 查看本教程link以更好地了解如何使用GQL查询mongodb。