w3resource

Renaming a MongoDB Database using a Copy-and-Drop Workaround

How to Rename a MongoDB Database?

MongoDB does not provide a direct command to rename a database. Instead, renaming a database in MongoDB involves a workaround that includes copying data from the original database to a new one, then deleting the original database if desired. This process requires using commands to clone collections to the new database and ensuring data integrity during the transfer

Renaming a database in MongoDB requires a workaround, as MongoDB does not support a direct rename operation for databases. The process involves creating a new database, copying collections from the old database to the new one, and then dropping the old database if needed. This method effectively achieves a database rename while maintaining the integrity of your data.

Steps and Syntax:

  • Copy Each Collection to the New Database
    You can use the aggregate command with the $out operator to clone each collection from the original database to the new one.
  • Drop the Original Database (optional)
    Once all collections are successfully copied to the new database, you can drop the original database if you no longer need it.

Example Code:

Let’s say you want to rename a database from oldDatabase to newDatabase.

Code:

// Switch to the old database
use oldDatabase

// List all collections in the old database
let collections = db.getCollectionNames();

// Loop through each collection to copy it to the new database
collections.forEach(collection => {
  // Use aggregation pipeline to output collection data to the new database
  db[collection].aggregate([
    { $match: {} },  // Match all documents
    { $out: `newDatabase.${collection}` }  // Output to the collection in new database
  ]);
});

// Optional: Drop the original database after copying
use oldDatabase
db.dropDatabase();

Explanation:

  • use oldDatabase
    Switches to the original database you want to rename, oldDatabase.
  • db.getCollectionNames()
    Lists all collection names in oldDatabase, so you know which collections to copy.
  • collections.forEach(...)
    Loops through each collection to perform the copy operation.
  • db[collection].aggregate([ ... ])
    This aggregation pipeline selects all documents in the current collection ($match: {}) and copies them to the specified collection in newDatabase using $out.
  • { $out: newDatabase.${collection} }
    The $out stage creates or overwrites a collection in newDatabase with the documents from the current collection in oldDatabase.
  • db.dropDatabase() (optional)
    After copying all collections, you can drop oldDatabase to fully "rename" it to newDatabase.

This approach provides a reliable way to rename a database by copying all its collections and then deleting the old database if needed.

Practical Guides to MongoDB Snippets and Examples.



Follow us on Facebook and Twitter for latest update.