2

私はmongodbとphpを使用してプロジェクトを行っています。そこで、ここではphpを使用して既存のデータベースの名前を変更しようとしました。だから私はデータベースの名前を変更するために次の方法をしました。

  • まず、新しいデータベースを作成します(ユーザー新しいデータベース名)
  • 古いデータベースからすべてのレコードを読み取り、新しいデータベースに挿入します
  • それから私は古いデータベースを削除します

これは私のコードです。

            $conn = new \MongoClient('mongodb://example.com:27017', array("connect" => TRUE));
            $exist_dbs = $conn->listDBs();

            foreach ($exist_dbs["databases"] as $databse) {
                if ($databse['name'] == $new_name) {
                    $new_name_is_exist = true;
                }
            }
            if (!$new_name_is_exist) {
                $db = new \MongoDB($conn, $old_name);

                //create new database
                $db_new = new \MongoDB($conn, $new_name);
                $collections = $db->getCollectionNames();

                foreach ($collections as $collection) {
                    //create collection
                    $new_collection = new \MongoCollection($db_new, $collection);

                    $mongo_collection = $db->$collection;
                    $objects = $mongo_collection->find();

                    while ($document = $objects->getNext()) {
                        //add records
                        $new_collection->insert($document);
                    }
                }
                $db->drop();
                $msg = 'database renamed';
            } else {
                $msg = 'given database name already exist';
            }
            $conn->close();

それはうまくいきます。しかし、phpを使用してmongoデータベースの名前を変更するより良い方法はありますか?

4

3 に答える 3

1

db(php + mongodb)をコピーします:

<?php

$rename = 'oldname';
$name = 'newname';
$mongo = (new MongoClient());
$db = $mongo->admin;
$response = $db->command(array(
    'copydb' => 1, 
    'fromhost' => 'localhost',
    'fromdb' => $rename,
    'todb' => $name
    ));

print_r($response);

データベースを削除(php + mongodb):

<?php

$name = 'oldname';
$mongo = (new MongoClient());
$db = $mongo->$name;
$response = $db->command(array(
    'dropDatabase' => 1
    ));

print_r($response);
于 2013-02-05T08:04:20.037 に答える
0
$db=new new Mongo();

old_dbをnew_dbにコピーします

$responseCopy = $db->admin->command(array(
    'copydb' => 1, 
    'fromhost' => 'localhost',
    'fromdb' => 'old_db',
    'todb' =>'new_db'
    ));

ここでold_dbを削除します

if($responseCopy['ok']==1){
 $responseDrop=$db->old_db->command(array('dropDatabase' => 1));
 //OR 
 $responseDrop =$db->old_db->drop();
}

出力を表示

print_r($responseCopy);
print_r($responseDrop);

出力は次のようになります

Array ( [ok] => 1 ) 
Array ( [dropped] => old_db [ok] => 1 ) 
于 2013-08-21T21:40:46.850 に答える
0

あなたはこれを使うことができます

$mongo = new MongoClient('_MONGODB_HOST_URL_');
$query = array("renameCollection" => "Database.OldName", "to" => "Database.NewName", "dropTarget" => "true");

$mongo->admin->command($query);
于 2013-12-17T16:29:12.230 に答える