Notando que a maioria dos programadores PHP utilizam MySQL e para você começar a usar o MongoDB ncessita de uma base de dados para começar a programar sua funções, tive a idéia de criar um conversor simples de MySQL para MongoDB. Aqui vou explicar o seu código e como é simples utilizar o MongoDB com PHP.
Criei uma interface bem simples para que possamos enviar os dados sem precisar ficar mudando no código.
Essa interface enviará, via POST, as variáveis de conexão com o banco de dados MySQL.
$host = isset($_REQUEST['host_mysql']) ? $_REQUEST['host_mysql'] : “localhost”;
$user = isset($_REQUEST['user_mysql']) ? $_REQUEST['user_mysql'] : “usuario”;
$pass = isset($_REQUEST['pass_mysql']) ? $_REQUEST['pass_mysql'] : “senha”;
$db = isset($_REQUEST['db_mysql']) ? $_REQUEST['db_mysql'] : “teste_latin”;
Agora é hora de criar a conexão com o MongoDB utilizando uma extensão instalada no php: http://github.com/downloads/mongodb/mongo-php-driver/mongo-1.0.6-r1-php5.3vc6ts.zip
try{
$conexao = new Mongo(); //abre conexão com o MongoDB
$db_mongo = $conexao->$db; //cria a database com o mesmo nome do MySQL
}
catch(MongoConnectionException $e){
die(“<h1 class=’erro’>Erro do banco de dados MONGODB – Inicie o servidor do MongoDD!</h1><span class=’dica’>Dica: Entre no prompt do windows<br />
cd \ <br />
cd mongodb<br />
cd bin<br />
mongod </span>”);
}
Caso o seu MongoDB não esteja rodando o script indicará o erro e mostrará a forma como iniciar seu MongoDB no Windows.
Para conseguirmos pegar o nome de todas as tabelas da nossa database no MySQL utilizamos a seguinte query:
$query_pega_tabelas = “SHOW TABLES”;
O nome do nosso campo contendo as tabelas será:
$index_tabelas = “Tables_in_”.$db; //nome do array com o valor do nome das tabelas via SHOW TABLES
Onde a variável $db será o nome da nossa database no MySQL. Após pegarmos os nomes das nossas tabelas é hora de irmos tabela por tabela pegando seus dados e inserindo-os, não será necessário pegar os metadados(tipo, tamanho) dos campos pois o MongoDB não necessita dessas informações.
if($result_pega_tabelas=mysql_query($query_pega_tabelas)){
while($arr_pega_tabelas[] = mysql_fetch_assoc($result_pega_tabelas)){
}
$rs_charset=mysql_query($query_charset);
foreach($arr_pega_tabelas as $c=>$v){
if(is_array($v)){
foreach($v as $a => $b){
echo “<h3>Tabela: “.$b.”</h3>”;
$nome_tabela = $b;
$query_pega_dados = “EXPLAIN “.$nome_tabela;
if($result_pega_dados=mysql_query($query_pega_dados)){
$arr_pega_dados = array();
while($arr_pega_dados = mysql_fetch_assoc($result_pega_dados)){
$arr_totalis[$nome_tabela][] = $arr_pega_dados;
}//fim while
}//fim if query pega dados
}//fim foreach
}//fim if array
}//fim foreeach
Geramos uma collection para cada tabela existente no MySQL.
foreach($arr_totalis as $c => $v){
$query = ‘select * from ‘.$c;
$collection = $db_mongo->$c;
$rs_select = mysql_query($query);
echo “Inserindo em “.$c.”<br />”;
echo “<pre>”;
while($arr_dados = mysql_fetch_assoc($rs_select)){
Precisamos codificar nossos valores, assim como os campos, em utf8. Porém caso nosso banco já esteja em utf8 não será necessária a conversão. Para isso criei um pequena função utilizando iconv.
foreach($arr_dados as $c => $v){
$obj[utf8_encode_suissa($c)] = utf8_encode_suissa($v);
}//fim foreach
$arr[] = $obj;
}//fim while
$erro = 0;
No caso meu banco que será convertido está codificado em latin1, correspondente ao charset iso-8859-1. Essa função vai ao final do script.
function utf8_encode_suissa($s) {
return iconv(‘iso-8859-1′, ‘utf-8′, $s);
}
Após a conversão para utf8 inserimos o objeto codificado, com a função insert(), na nossa collection que terá o mesmo nome que a tabela correspondente no MySQL.
foreach($arr as $cc => $vv){
if(!$collection->insert($vv)){
echo “Não inseriu”.print_r($c) ;
$erro++;
$var_erro[] = var_dump($vv);
}//fim if
}//fim foreach
Caso tenha ocorrido algum erro mostrará-o com var_dump, só para ter uma noção de como os dados estão estruturados.
if($erro > 0){
echo “<h3>Aconteceram os seguintes erros:</h3>”;
foreach($var_erro as $f => $g){
var_dump($g);
}//fim foreach
}//fim if
echo “</pre>”;
}//fim foreach
}//fim if
Ao término do script você poderá entrar no phpMoAdmin, ferramenta para manipular as bases e as collections do MongoDB, e ver na lista das databases sua nova base criada.
O scrip completo com a interface para inserir os dados se encontra em: http://www.nosqlbr.com.br/conversor_mysql_mongodb.zip


[...] This post was mentioned on Twitter by Alessandro Martins, NoSQL BRASIL. NoSQL BRASIL said: #nosql : Converter MySQL para MongoDB http://www.nosqlbr.com.br/converter-mysql-para-mongodb.html #mysql #mongodb [...]