Tutorial: How to use MongoDB

Martin Lasek
Jan 6, 2018 Β· 4 min read
Image for post
Image for post

In this tutorial you’ll learn how to use MongoDB with your project ✨ πŸš€ 😊

You can find the result of this tutorial on github here

This tutorial is a natural follow-up of How to write Controllers. You can either go for that tutorial first and come back later or be a rebel, skip it and read on 😊


1. Install Homebrew
2. Install MongoDB
3. Create and generate a new project
4. Configure your project to use MongoDB

1. Install Homebrew

If you don’t have it yet I highly recommend to get it. It makes it super easy for you to install dependencies like MongoDB. To install Homebrew execute the following in your terminal:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

We will also install brew services. It will make it incredibly easy to start the MongoDB server and let it start alongside with your mac! That’s awesome ✨!

brew tap homebrew/services

Now whenever you want to know what services are running just execute:

brew services list

2. Install MongoDB

Installing MongoDB with Homebrew is so easy, what am I even here for πŸ˜„?

brew install mongodb

That’s it. Done. Now to start mongodb just execute the following command:

brew services start mongodb

See how easy brew services makes it? mongodb now starts alongside your mac!

We don’t have to create a database manually. In fact defining our database configuration within our project with a database name that very database will be created as soon as data is inserted. And we do insert data when we submit a name for our userlist under /user β˜πŸ»πŸ€“

Terminal Cheatsheet:

connect to mongodb server:     mongo
within server, list databases: show dbs
within server, exit server: quit()

Alrighty! You are ready for step 3. Create and generate a new project 😊

3. Create and generate a new project

We will use the outcome of the tutorial mentioned in the beginning as a template to create our new project:

vapor new projectName --template=vaporberlin/my-first-controller --branch=vapor-2

Before we generate an Xcode project we would have to change the package name within Package.swift:

// swift-tools-version:4.0import PackageDescriptionlet package = Package(
name: "projectName", // changed
products: [
.library(name: "App", targets: ["App"]),
.executable(name: "Run", targets: ["Run"])
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", .upToNextMajor(from: "2.1.0")),
.package(url: "https://github.com/vapor/leaf-provider.git", .upToNextMajor(from: "1.1.0")),
.package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.3.0")),
.package(url: "https://github.com/vapor-community/mongo-provider.git", .upToNextMajor(from: "2.0.0")) // added
targets: [
.target(name: "App", dependencies: ["Vapor", "LeafProvider", "FluentProvider", "MongoProvider"],
exclude: [
.target(name: "Run", dependencies: ["App"]),
.testTarget(name: "AppTests", dependencies: ["App", "Testing"])

Now in the terminal at the root directory projectName/ execute:

vapor update -y

It may take a bit fetching the dependency, but when done you should have a project structure like this:

β”œβ”€β”€ Package.swift
β”œβ”€β”€ Sources/
β”‚ β”œβ”€β”€ App/
β”‚ β”‚ β”œβ”€β”€ Controllers/
β”‚ β”‚ β”‚ └── UserController.swift
β”‚ β”‚ β”œβ”€β”€ Models/
β”‚ β”‚ β”‚ └── User.swift
β”‚ β”‚ β”œβ”€β”€ Routes/
β”‚ β”‚ β”‚ └── Routes.swift
β”‚ β”‚ └── Setup/
β”‚ β”‚ β”œβ”€β”€ Config+Setup.swift
β”‚ β”‚ └── Droplet+Setup.swift
β”‚ └── Run/
β”œβ”€β”€ Tests/
β”œβ”€β”€ Config/
β”œβ”€β”€ Resources/
β”œβ”€β”€ Public/
β”œβ”€β”€ Dependencies/
└── Products/

If you now cmd+r or run we should be able to access the /user route 😊!

Image for post
Image for post
Note: make sure to select Run as a scheme next to your button before running the app

4. Configure your project to use MongoDB

Now all we need is a configuration file that holds our database information. Create a new Folder within Config/ and name it secrets/ so our database configuration file won’t be tracked by git.

Within Config/secrets/ create a file and name it mongo.json and insert the following configuration:

"url": "mongodb://"

NOTE Here’s the full possible configuration in case you’ve a user and password: β€œmongodb://<db-user>:<db-pw>@<host>:<port>/<database>”

Finally we’ll tell fluent to use mongodb as a driver. So in Config/fluent.json:

"driver": "mongo", ...

Lastly we’ll add the MongoProvider within Setup/Config+Setup.swift:

import LeafProvider
import FluentProvider
import MongoProvider // added
extension Config {
public func setup() throws {
try setupProviders()
try setupPreparations()
private func setupProviders() throws {
try addProvider(LeafProvider.Provider.self)
try addProvider(FluentProvider.Provider.self)
try addProvider(MongoProvider.Provider.self) // added
private func setupPreparations() throws {

Our final cmd+r or run and refresh of /user and that’s it! You successfully configured your project to use a mongodb database πŸŽ‰ πŸš€ πŸŽ‰

Thank you a lot for reading! If you have any questions or improvements β€” write a comment! I would love to hear from you! 😊

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium β€” and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store