2 votes

Comment renommer une base de données mongodb

Je dois renommer une base de données MongoDB DB de manière programmatique. Je n'ai pas vu de moyen de le faire avec le pilote MongoDB c#.

Je voudrais faire quelque chose comme : this.mongoClient.renameDatabase("oldName", "newName") ;

J'imagine que je peux créer mon propre système, mais j'ai l'impression que cela devrait être possible avec un pilote actuel.

0voto

Ryan Gunner Points 1466

Exécuter un renameCollection sur la base de données d'administration pour chaque nom de collection dans votre base de données source avec le format :

renameCollection: 'old.CollectionName', to: 'new.CollectionName'

Voici comment le faire en C# :

var client = new MongoClient();
var dbAdmin = client.GetDatabase("admin");

var dbOldName = "old-db";
var dbNewName = "new-db";

var collections = client.GetDatabase(dbOldName).ListCollectionNames().ToList();

foreach (var collection in collections)
{
    var command = $"{{ renameCollection: '{dbOldName}.{collection}', to: '{dbNewName}.{collection}' }}";

    dbAdmin.RunCommand<BsonDocument>(command);
}

0voto

CodeMilian Points 204

J'ai trouvé une solution qui fonctionne pour moi. Certes, j'ai affaire à de plus petites bases de données, mais cette solution peut résoudre le problème pour certains.

/// <summary>
///  Renames old database to new database by copying all its collected contents
///  ToDO: Add checks and balances to ensure all items were transferred correctly over
///  Disclaimer: use at own risk and adjust to your needs
/// </summary>
/// <param name="currentName"></param>
/// <param name="newName"></param>
public void renameDatabase(string currentName, string newName)
{

    this.mongoClient.DropDatabase(newName); //we drop the new database in case it exists

    var newDb = mongoClient.GetDatabase(newName); //get an instance of the new db

    var CurrentDb = mongoClient.GetDatabase(currentName); //get an instance of the current db

    foreach (BsonDocument Col in CurrentDb.ListCollections().ToList()) //work thru all collections in the current db
    {
        string name = Col["name"].AsString; //getting collection name

        //collection of items to copy from source collection
        dynamic collectionItems = CurrentDb.GetCollection<dynamic>(name).Find(Builders<dynamic>.Filter.Empty).ToList();

        //getting instance of new collection to store the current db collection items
        dynamic destinationCollection = newDb.GetCollection<dynamic>(name);

        //insert the source items into the new destination database collection
        destinationCollection.InsertMany(collectionItems);
    }

    //removing the old datbase
    this.mongoClient.DropDatabase(currentName);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X