Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重命名mongo数据库_Php_Mongodb - Fatal编程技术网

Php 重命名mongo数据库

Php 重命名mongo数据库,php,mongodb,Php,Mongodb,我正在使用mongodb和php做项目。所以在这里,我尝试使用php重命名现有数据库。所以我按照下面的方法重命名了数据库 首先创建新数据库(用户新数据库名称) 从旧数据库读取所有记录并插入新数据库 然后我放下旧的db 这是我的密码 $conn = new \MongoClient('mongodb://example.com:27017', array("connect" => TRUE)); $exist_dbs = $conn->

我正在使用mongodb和php做项目。所以在这里,我尝试使用php重命名现有数据库。所以我按照下面的方法重命名了数据库

  • 首先创建新数据库(用户新数据库名称)
  • 从旧数据库读取所有记录并插入新数据库
  • 然后我放下旧的db
这是我的密码

            $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数据库?

复制数据库(php+mongodb):


将旧数据库复制到新数据库

$responseCopy = $db->admin->command(array(
    'copydb' => 1, 
    'fromhost' => 'localhost',
    'fromdb' => 'old_db',
    'todb' =>'new_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 ) 
你可以用这个

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

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

取决于数据库是否有分片集合
print_r($responseCopy);
print_r($responseDrop);
Array ( [ok] => 1 ) 
Array ( [dropped] => old_db [ok] => 1 ) 
$mongo = new MongoClient('_MONGODB_HOST_URL_');
$query = array("renameCollection" => "Database.OldName", "to" => "Database.NewName", "dropTarget" => "true");

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