首页 > 解决方案 > 使用 MongoDB 中的 GraphQL 按 ID 查找对象

问题描述

GraphQL API我一直在尝试设置一个Next.js连接到MongoDB. 问题是:我可以使用什么功能来代替.findOne()过滤掉特定对象,而无需移动到服务器(节点)环境?

这是示例:

import { ApolloServer, gql } from 'apollo-server-micro'
import { makeExecutableSchema } from 'graphql-tools'
import { MongoClient } from 'mongodb'

const typeDefs = gql`

  type user {
    _id: ID!,
    firstname: String!,
    lastname: String!,
    links: [String!],
  },

  type Query {
    user(_id: ID): user!
  }

`

我可以在这里使用什么来通过 id 过滤特定对象而不移动到 Node 环境?

const resolvers = {
    Query: {
        user(_parent, _args, _context, _info) {
            return _context.db
                .collection('userdata')
                .findOne()             
        },
    },
}

应用程序的其余部分:


const schema = makeExecutableSchema({
    typeDefs,
    resolvers,
})

let db;

const apolloServer = new ApolloServer({
    schema,
    context: async () => {
        if (!db) {
            try {
                const dbClient = new MongoClient(process.env.DB_KEY, {
                    useNewUrlParser: true,
                    useUnifiedTopology: true,
                })
                if (!dbClient.isConnected()) await dbClient.connect()
                db = dbClient.db('*****')
            } catch (e) {
                console.log(e)
            }
        }
        return { db }
    },
})


export const config = {
    api: {
        bodyParser: false,
    },
}

export default apolloServer.createHandler({ path: '/api/graphql' })

标签: javascriptmongodbapinext.jsgraphql-js

解决方案


推荐阅读