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
Description:
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.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://w3resource.com/mongodb/snippets/how-to-rename-a-mongodb-database.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics