Как правильно подключить MongoDB к GraphQL серверу?

Для подключения MongoDB к GraphQL серверу существует несколько подходов. Ниже я расскажу о двух наиболее распространенных способах.

1. Использование официального драйвера MongoDB:
- Установите MongoDB и убедитесь, что она работает и доступна.
- Установите необходимые зависимости. В основном, вам понадобятся пакеты graphql и express-graphql для создания GraphQL сервера, а также пакет mongodb для работы с MongoDB.
- Создайте файл schema.graphql, в котором определите схему GraphQL. Например:

   type User {
     id: ID!
     name: String!
     age: Int!
   }

   type Query {
     users: [User!]!
   }

- В файле server.js создайте GraphQL сервер, подключите драйвер для работы с MongoDB и реализуйте резолверы для вашей схемы.

   const express = require('express');
   const { graphqlHTTP } = require('express-graphql');
   const { MongoClient, ObjectID } = require('mongodb');

   const MONGO_URL = 'mongodb://localhost:27017/mydatabase';

   const resolvers = {
     Query: {
       users: async () => {
         const client = await MongoClient.connect(MONGO_URL);
         const db = client.db();
         const collection = db.collection('users');
         const users = await collection.find().toArray();
         client.close();
         return users;
       }
     }
   };

   const app = express();

   app.use('/graphql', graphqlHTTP({
     schema: schema,
     rootValue: resolvers,
     graphiql: true
   }));

   app.listen(4000, () => {
     console.log('GraphQL server is running on http://localhost:4000/graphql');
   });

- Запустите сервер командой node server.js и откройте GraphQL Playground в браузере по адресу http://localhost:4000/graphql.

2. Использование более высокоуровневых инструментов:
- Установите необходимые зависимости. В данном случае мы будем использовать пакет apollo-server для создания GraphQL сервера и пакет mongoose для работы с MongoDB.
- Создайте файл schema.graphql и определите схему GraphQL.
- В файле server.js создайте GraphQL сервер с помощью apollo-server, подключите mongoose к базе данных MongoDB и реализуйте резолверы для вашей схемы.

   const { ApolloServer, gql } = require('apollo-server');
   const mongoose = require('mongoose');

   const MONGO_URL = 'mongodb://localhost:27017/mydatabase';

   // Определение схемы GraphQL
   const typeDefs = gql`
     type User {
       id: ID!
       name: String!
       age: Int!
     }

     type Query {
       users: [User!]!
     }
   `;

   // Создание модели User с использованием mongoose
   const User = mongoose.model('User', {
     name: String,
     age: Number
   });

   // Реализация резолверов
   const resolvers = {
     Query: {
       users: () => User.find()
     }
   };

   // Создание сервера
   const server = new ApolloServer({
     typeDefs,
     resolvers
   });

   // Подключение к базе данных и запуск сервера
   mongoose.connect(MONGO_URL, { useNewUrlParser: true })
     .then(() => {
       server.listen().then(({ url }) => {
         console.log(`GraphQL server is running on ${url}`);
       });
     })
     .catch(err => {
       console.error('Error connecting to MongoDB:', err);
     });

- Запустите сервер командой node server.js и откройте GraphQL Playground в браузере по адресу, указанному в выводе консоли.

Оба эти способа предоставляют удобный интерфейс для работы с MongoDB через GraphQL. Вы можете выбрать тот, который лучше соответствует вашим потребностям и привычкам.