Fastify MongoDB connection plugin
268
stars
261
commits
JavaScript
primary language
Aug 9, 2026
updated
Fastify MongoDB connection plugin; with this you can share the same MongoDB connection pool in every part of your server.
Under the hood the official MongoDB driver is used,
the options that you pass to register will be passed to the Mongo client.
The mongodb driver is v7.x.x.
If you do not provide the client by yourself (see below), the URL option is required.
npm i @fastify/mongodb
Add it to your project with register and you are done!
const fastify = require('fastify')()
fastify.register(require('@fastify/mongodb'), {
// force to close the mongodb connection when app stopped
// the default value is false
forceClose: true,
url: 'mongodb://mongo/mydb'
})
fastify.get('/user/:id', async function (req, reply) {
// Or this.mongo.client.db('mydb').collection('users')
const users = this.mongo.db.collection('users')
// if the id is an ObjectId format, you need to create a new ObjectId
const id = new this.mongo.ObjectId(req.params.id)
try {
const user = await users.findOne({ id })
return user
} catch (err) {
return err
}
})
fastify.listen({ port: 3000 }, err => {
if (err) throw err
})
You may also supply a pre-configured instance of mongodb.MongoClient:
const mongodb = require('mongodb')
mongodb.MongoClient.connect('mongodb://mongo/db')
.then((client) => {
const fastify = require('fastify')()
fastify.register(require('@fastify/mongodb'), { client: client })
.register(function (fastify, opts, next) {
const db = fastify.mongo.client.db('mydb')
// ...
// ...
// ...
next()
})
})
.catch((err) => {
throw err
})
Notes:
client connection will not be closed when the Fastify server
shuts down.mongodb connection timeout is reduced from 30s (default) to 7.5s to throw an error before fastify plugin timeout.This plugin decorates the fastify instance with a mongo object. That object has the
following properties:
client is the MongoClient instanceObjectId is the ObjectId classdb is the DB instanceThe ObjectId class can also be directly imported from the plugin as it gets re-exported from mongodb:
const { ObjectId } = require('@fastify/mongodb')
const id = new ObjectId('some-id-here')
The db property is added only if:
database string option is given during the plugin registration.A name option can be used to connect to multiple MongoDB clusters.
const fastify = require('fastify')()
fastify
.register(require('@fastify/mongodb'), { url: 'mongodb://mongo1/mydb', name: 'MONGO1' })
.register(require('@fastify/mongodb'), { url: 'mongodb://mongo2/otherdb', name: 'MONGO2' })
fastify.get('/', function (req, res) {
// This collection comes from "mongodb://mongo1/mydb"
const coll1 = this.mongo.MONGO1.db.collection('my_collection')
// This collection comes from "mongodb://mongo2/otherdb"
const coll2 = this.mongo.MONGO2.db.collection('my_collection')
// ...
// ...
// do your stuff here
// ...
// ...
res.send(yourResult)
})
This project is kindly sponsored by:
Past sponsors:
Licensed under MIT.
(top 30 of 34)
JavaScript
96.3%
TypeScript
3.7%
Fastify MongoDB connection plugin
268
stars
261
commits
JavaScript
primary language
Aug 9, 2026
updated
Fastify MongoDB connection plugin; with this you can share the same MongoDB connection pool in every part of your server.
Under the hood the official MongoDB driver is used,
the options that you pass to register will be passed to the Mongo client.
The mongodb driver is v7.x.x.
If you do not provide the client by yourself (see below), the URL option is required.
npm i @fastify/mongodb
Add it to your project with register and you are done!
const fastify = require('fastify')()
fastify.register(require('@fastify/mongodb'), {
// force to close the mongodb connection when app stopped
// the default value is false
forceClose: true,
url: 'mongodb://mongo/mydb'
})
fastify.get('/user/:id', async function (req, reply) {
// Or this.mongo.client.db('mydb').collection('users')
const users = this.mongo.db.collection('users')
// if the id is an ObjectId format, you need to create a new ObjectId
const id = new this.mongo.ObjectId(req.params.id)
try {
const user = await users.findOne({ id })
return user
} catch (err) {
return err
}
})
fastify.listen({ port: 3000 }, err => {
if (err) throw err
})
You may also supply a pre-configured instance of mongodb.MongoClient:
const mongodb = require('mongodb')
mongodb.MongoClient.connect('mongodb://mongo/db')
.then((client) => {
const fastify = require('fastify')()
fastify.register(require('@fastify/mongodb'), { client: client })
.register(function (fastify, opts, next) {
const db = fastify.mongo.client.db('mydb')
// ...
// ...
// ...
next()
})
})
.catch((err) => {
throw err
})
Notes:
client connection will not be closed when the Fastify server
shuts down.mongodb connection timeout is reduced from 30s (default) to 7.5s to throw an error before fastify plugin timeout.This plugin decorates the fastify instance with a mongo object. That object has the
following properties:
client is the MongoClient instanceObjectId is the ObjectId classdb is the DB instanceThe ObjectId class can also be directly imported from the plugin as it gets re-exported from mongodb:
const { ObjectId } = require('@fastify/mongodb')
const id = new ObjectId('some-id-here')
The db property is added only if:
database string option is given during the plugin registration.A name option can be used to connect to multiple MongoDB clusters.
const fastify = require('fastify')()
fastify
.register(require('@fastify/mongodb'), { url: 'mongodb://mongo1/mydb', name: 'MONGO1' })
.register(require('@fastify/mongodb'), { url: 'mongodb://mongo2/otherdb', name: 'MONGO2' })
fastify.get('/', function (req, res) {
// This collection comes from "mongodb://mongo1/mydb"
const coll1 = this.mongo.MONGO1.db.collection('my_collection')
// This collection comes from "mongodb://mongo2/otherdb"
const coll2 = this.mongo.MONGO2.db.collection('my_collection')
// ...
// ...
// do your stuff here
// ...
// ...
res.send(yourResult)
})
This project is kindly sponsored by:
Past sponsors:
Licensed under MIT.
(top 30 of 34)
JavaScript
96.3%
TypeScript
3.7%