MongoDB: 3 ways to dump/export a database to a JSON or CSV file

Updated: February 1, 2024 By: Guest Contributor Post a comment

Introduction

MongoDB, being a leading NoSQL database, offers powerful ways to export data in various formats, including JSON and CSV. Exporting data is crucial for tasks like data analysis, migration, backups, or sharing datasets. This post covers several solutions for exporting a MongoDB database into either a JSON or a CSV file.

Solution 1: Using mongoexport Utility

The mongoexport command-line utility is provided by MongoDB to export the contents of a collection to JSON or CSV format. It’s suitable for simple export needs and is easy to use for those familiar with command-line interfaces.

  1. Ensure you have MongoDB installed and that the MongoDB server is running.
  2. Open the terminal or command prompt on your machine.
  3. Use the mongoexport utility with the necessary parameters specifying the database, collection, export format, and file output path.

Example:

mongoexport --db=<your_database> --collection=<your_collection> --out=<exported_file>.<json_or_csv>
Output: <Number_of_documents> record(s) exported successfully.

Notes:

  • Easy to use; comes bundled with MongoDB.
  • Not suitable for complex exports involving data transformation.
  • Efficient for small to medium-sized data exports.
  • Cannot export results of aggregations directly.

Solution 2: Scripting with MongoClient in Python

Writing a Python script using PyMongo’s MongoClient can provide you with a more flexible way of exporting data, allowing you to perform data transformations and filter operations before exporting.

  1. Install the PyMongo library using pip install pymongo.
  2. Write a Python script to connect to the database, retrieve data, and write it to a JSON/CSV file.

Example:

import pymongo
import json
from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client['<your_database>']
collection = db['<your_collection>']
cursor = collection.find({})

with open('<exported_file>.json', 'w') as file:
    file.write('[')
    for i, document in enumerate(cursor):
        if i: file.write(',')
        file.write(json.dumps(document))
    file.write(']')

# Output : JSON file with array of documents

Notes:

  • This solution offers more control over the exported data.
  • Requires writing a script, knowledge of Python.
  • Performance may vary based on the script efficiency.
  • Can handle complex data transformations.

Solution 3: Aggregation Pipeline with $out/$merge

In MongoDB, the aggregation framework can redirect the output of an aggregation query into a new collection. You can then export this collection using the mongoexport utility.

  1. Use the Mongo shell or a MongoDB interface to connect to your database.
  2. Perform an aggregation with $out or $merge to write the results into a new collection.
  3. Export the new collection using mongoexport to the desired format.

Example:

db.<your_original_collection>.aggregate([{...}, {$out : "<new_collection>"}]);
# Now, use mongoexport on <new_collection>
mongoexport --db=<your_database> --collection=<new_collection> --out=<exported_file>.json

Notes:

  • Allows exporting the results of complex aggregations.
  • A two-step process; involves creating an intermediary collection.
  • Decent, can be optimized by aggregation query performance.
  • Intermediate storage requirement; cleaning up is necessary.

Conclusion

In essence, MongoDB provides several methods to export your data to JSON or CSV files, catering to various needs and skill levels. From simple command-line utilities like mongoexport to Python scripting with PyMongo and utilizing the aggregation framework, each solution offers different advantages and fits different use cases. Your choice largely depends on the complexity of the data export task, your proficiency in programming or using command-line tools, and your specific performance considerations.