我需要带有 graphql 的猫鼬吗?

Do I need mongoose with graphql?

如果我想将 mongo 数据库连接到 graphql 模式,我需要 mongoose ORM 还是我可以直接调用原始驱动程序?

两者都可以。

如果您已经定义了 mongoose 模型,则可以在编写 resolve 函数时使用它们。见 following example.

var QueryType = new GraphQLObjectType({  
  name: 'Query',
  fields: () => ({
    todos: {
      type: new GraphQLList(TodoType),
      resolve: () => {
        return new Promise((resolve, reject) => {
          TODO.find((err, todos) => {
            if (err) reject(err)
            else resolve(todos)
          })
        })
      }
    }
  })
})

如果你没有 mongoose 模型或者你想使用 mongodb 本地驱动程序,你也可以这样做。以下是使用 MongoDB Node.JS Driver.

执行此操作的简单示例
resolve: () => {
  return new Promise((resolve, reject) => {
    db.collection('todos').find({}).toArray((err, todos) => {
      if (err) reject(err)
      else resolve(todos)
    })
  })
}

如果您有 mongoose 模型并且想从它们生成 GraphQL 架构,您可能会对 graffiti-mongoose 感兴趣,它会从现有的 mongoose 模型生成 GraphQL 类型和架构。