Using GraphQL with MongoDB
Introduction
GraphQL is a query language for your API, and a runtime for executing those queries by using a type system you define for your data. This tutorial will guide you through the steps to set up a GraphQL server with MongoDB as the data source, using Node.js and Apollo Server.
Setting Up
To get started, you need to set up a Node.js project and install the necessary dependencies:
Setting Up the Project
mkdir graphql-mongodb
cd graphql-mongodb
npm init -y
npm install apollo-server graphql mongoose
Connecting to MongoDB
Create a db.js file to handle the connection to MongoDB:
db.js
const mongoose = require('mongoose');
const connectDB = async () => {
await mongoose.connect('mongodb://localhost:27017/graphql', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log('MongoDB connected');
};
module.exports = connectDB;
Defining GraphQL Schema
Create a schema.js file to define your GraphQL schema and resolvers:
schema.js
const { gql } = require('apollo-server');
const typeDefs = gql`
type User {
id: ID!
name: String!
email: String!
}
type Query {
users: [User]
user(id: ID!): User
}
type Mutation {
addUser(name: String!, email: String!): User
}
`;
const User = require('./models/User');
const resolvers = {
Query: {
users: () => User.find(),
user: (_, { id }) => User.findById(id),
},
Mutation: {
addUser: (_, { name, email }) => {
const user = new User({ name, email });
return user.save();
},
},
};
module.exports = { typeDefs, resolvers };
Creating the User Model
Create a models/User.js file to define the MongoDB schema and model:
User.js
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
email: String,
});
module.exports = mongoose.model('User', userSchema);
Setting Up Apollo Server
Create an index.js file to set up Apollo Server and connect everything together:
index.js
const { ApolloServer } = require('apollo-server');
const connectDB = require('./db');
const { typeDefs, resolvers } = require('./schema');
connectDB();
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
Running the Server
Start the server by running the following command:
Starting the Server
node index.js
You should see the message "Server ready at http://localhost:4000" indicating that the GraphQL server is running.
Testing the GraphQL API
Open your browser and navigate to http://localhost:4000 to access the GraphQL Playground. Here you can run queries and mutations to test your GraphQL API.
Example Query
query {
users {
id
name
email
}
}
Example Mutation
mutation {
addUser(name: "John Doe", email: "john.doe@example.com") {
id
name
email
}
}
Conclusion
In this tutorial, you have learned how to set up a GraphQL server with MongoDB as the data source using Node.js and Apollo Server. This setup allows you to create a flexible and powerful API for interacting with your MongoDB data.
