<?php
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
try {
$link = mysqli_connect('localhost', 'root', '')
or die('No se pudo conectar: ' . mysqli_error());
mysqli_select_db($link,'classicmodels5') or die('No se pudo seleccionar la base de datos');
$query = "select c.customerNumber,c.customerName,c.city as customerCity, c.country as customerCountry,c.salesRepEmployeeNumber from customers as c";
$result = mysqli_query($link,$query);
$isFirst=0;
$isFirst2=0;
$isFirst3=0;
$isFirst4=0;
$json="";
while ($fila = mysqli_fetch_array($result)) {
$bulk = new MongoDB\Driver\BulkWrite;
$isFirst2=0;
$isFirst3=0;
$isFirst4=0;
extract($fila);
$json = $json."{";
//$json = $json.",{";
$json = $json.'"customerNumber":'.$fila["customerNumber"].',';
$json = $json.'"customerName":"'.$fila["customerName"].'",';
$json = $json.'"city":"'.$fila["customerCity"].'",';
$json = $json.'"country":"'.$fila["customerCountry"].'"';
//INICIO:INSERTAR PAYMENTS
$query2 = "select p.checkNumber,p.amount from payments as p where p.customerNumber=".$fila["customerNumber"];
$result2 = mysqli_query($link,$query2);
if(mysqli_num_rows($result2)>0){
$json=$json.',"payments":[';
}
while ($fila2 = mysqli_fetch_array($result2)) {
extract($fila2);
if($isFirst2==1){
$json = $json.",{";
}else{
$json = $json."{";
}
$json = $json.'"checkNumber":"'.$fila2["checkNumber"].'",';
$json = $json.'"amount":"'.$fila2["amount"].'"}';
$isFirst2=1;
}
if(mysqli_num_rows($result2)>0){
$json=$json.']';
}
//FIN:INSERTAR PAYMENTS
//INICIO: INSERTAR EMPLOYEE
$query3 = "SELECT e.employeeNumber,e.lastName,e.extension,e.officeCode FROM employees as e where e.employeeNumber=".$fila["salesRepEmployeeNumber"];
$result3 = mysqli_query($link,$query3);
if(mysqli_num_rows($result3)>0){
$json=$json.',"employees":[';
}
while ($fila3 = mysqli_fetch_array($result3)) {
extract($fila3);
if($isFirst3==1){
$json = $json.",{";
}else{
$json = $json."{";
}
$json = $json.'"employeeNumber":"'.$fila3["employeeNumber"].'",';
$json = $json.'"lastName":"'.$fila3["lastName"].'",';
$json = $json.'"extension":"'.$fila3["extension"].'"';
//INICIO:INSERTAR OFFICE
$query4 = "SELECT o.officeCode,o.city,o.country FROM offices as o where o.officeCode=".$fila3["officeCode"];
$result4 = mysqli_query($link,$query4);
if(mysqli_num_rows($result4)>0){
$json=$json.',"officeCode":';
}
while ($fila4 = mysqli_fetch_array($result4)) {
extract($fila4);
if($isFirst4==1){
$json = $json.",{";
}else{
$json = $json."{";
}
$json = $json.'"officeCode":"'.$fila4["officeCode"].'",';
$json = $json.'"city":"'.$fila4["city"].'",';
$json = $json.'"country":"'.$fila4["country"].'"}';
$isFirst4=1;
}
//FIN:INSERTAR OFFICE
$isFirst3=1;
}
if(mysqli_num_rows($result3)>0){
$json=$json.'}]';
}
//FIN:INSERTAR EMPLOYEE
$json = $json.'}';
echo $json."</br>";
//Hacer el insert
$bulk->insert(json_decode($json));
$resultFinal = $manager->executeBulkWrite('test.prueba3', $bulk);
$json="";
$isFirst=1;
}
$json = str_replace("'", " ", $json);
echo $json;
//echo $json;
/* $bulk->insert(json_decode($json));
$resultFinal = $manager->executeBulkWrite('test.customers', $bulk);
var_dump($resultFinal);*/
}catch(Exception $e) {
echo "EXCEPTION: ".$e->getMessage(), "\n";
exit;
}
?>
Когда я выполняю вставку, каждый раз, когда я заканчиваю первый цикл, я получаю следующую ошибку, я не понимаю, так ли это, потому что JSON неверен или должен быть вставлен другим способом
Warning: MongoDB\Driver\BulkWrite::insert() expects parameter 1 to be array, null given in C:\xampp2\htdocs\prac\index.php on line 111
EXCEPTION: Cannot do an empty bulk write
Мне нужно каждый раз, когда я заканчиваю первый цикл, вставлять документ JSON, чтобы на следующем круге добавить еще один, я получаю эту ошибку, но при проверке моего json в JSONLint я получаю, что это действительно.такое миграция с MySQL на MongoDB.
Это JSON, который выдает ошибку, которая, я думаю, правильно написана. Как вы думаете, где эта ошибка?Спасибо
{"customerNumber":144,"customerName":"Volvo Model Replicas, Co","city":"Lule�","country":"Sweden","payments":[{"checkNumber":"IR846303","amount":"36005.71"},{"checkNumber":"LA685678","amount":"7674.94"}],"employees":[{"employeeNumber":"1504","lastName":"Jones","extension":"x102","officeCode":{"officeCode":"7","city":"London","country":"UK"}}]}