How to drop all collections in a MongoDB database using Mongoose

August 19, 2020

During testing your API you often want to reset your DB for each test. This was the problem that I was facing.

I solved this by creating a reset endpoint wich drops all collections inside my MongoDB database.

Code sample is worth a thousand words, so here we go:

const mongoose = require('mongoose');
const express = require('express');
const router = express.Router();

// @route GET api/reset
// @access Private
router.delete('/', async (req, res) => {
  try {
    const db = mongoose.connection.db;

    // Get all collections
    const collections = await db.listCollections().toArray();

    // Create an array of collection names and drop each collection
    collections.map((collection) => collection.name).forEach(async (collectionName) => {
      db.dropCollection(collectionName)
    });

    res.sendStatus(200);
  } catch (e) {
    console.log(e);
    res.sendStatus(500);
  }
});

module.exports = router;