Blog

Cosmos DB API for MongoDB dump and restore

(2 minutes to read)
Categories:

Microsoft offers a tutorial on how to perform an offline migration of MongoDB to Cosmos DB API for MongoDB using native MongoDB database tools. However, I found that the steps provided in the tutorial didn’t work for me. After some experimentation with different options and commands, I finally succeeded in the migration process.

As of the time of writing, I used the following tool versions:

mongo --version
MongoDB shell version v3.6.7

mongodump --version
mongodump version: 100.8.0

mongorestore --version
mongorestore version: 100.8.0

Below, I’ll walk you through the process of dumping and restoring a MongoDB database. This method also applies when you’re migrating from Cosmos DB API for MongoDB to another Cosmos DB API for MongoDB instance.

Note: Before starting the restore process on your Cosmos DB account, ensure that the “Retryable writes” feature and access key metadata writes are enabled. You can safely return this feature to its previous state after the restore.

Step 1: Dump Your MongoDB Database

First, you need to dump your MongoDB database. Replace src_uri with the full connection string for your Cosmos DB API for MongoDB or MongoDB instance.

#!/bin/bash

src_uri=  # Full Cosmos DB API for Mongo DB or Mongo DB
          # connection string

mongodump \
  --numParallelCollections 1 \
  --out dump \
  $src_uri

Step 2: Restore Your MongoDB database to Cosmos DB

Next, you’ll restore your database to Cosmos DB API for MongoDB. Replace target_user, target_pswd, target_db, and target_uri with your target Cosmos DB API for MongoDB credentials and details.

#!/bin/bash

target_user= # Target Cosmos DB API for Mongo DB user
target_pswd= # Target Cosmos DB API for Mongo DB password
target_db=   # Target Cosmos DB API for Mongo DB database name
target_uri=  # Target Cosmos DB API for Mongo DB hostname and port

mongo \
  --ssl \
  --authenticationDatabase admin \
  --username $target_user \
  --password $target_pswd \
  --eval 'db.dropDatabase()' \
  $target_uri/$target_db

mongorestore \
  --host $target_uri \
  --authenticationDatabase admin \
  --username $target_user \
  --password $target_pswd \
  --ssl \
  --nsInclude "*" \
  --maintainInsertionOrder \
  --numParallelCollections 1 \
  dump

That’s it! You’ve successfully migrated your MongoDB database to Azure Cosmos DB API for MongoDB.

✨ If you found this post helpful and want to say "Thank you! 💖", you can treat me with a cup of tea.