2013-02-05 60 views
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数据库?

+0

取决于数据库是否具有分片集合或不 – Sammaye

回答

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); 

降DB(PHP +的MongoDB):

<?php 

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

print_r($response); 
+1

'< ?php print_r((new MongoClient()) - >'oldname' - > drop());' - drop database lite :) –

+0

非常感谢你!!!!!!!! – user1784592

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) 
0

您可以使用此

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

$mongo->admin->command($query);