【问题标题】:Importing csv into mongodb using PHP code使用 PHP 代码将 csv 导入 mongodb
【发布时间】:2013-12-30 06:21:27
【问题描述】:

我正在使用 MongoCollection::batchInsert() 将 csv 数据插入 mongodb,

<?php

$mongo = new Mongo("mongodb://192.168.1.7:27017");

$collection = $mongo->test->cartoons;
$row = 1;
 $handle = fopen(dirname(Yii::app()->request->scriptFile).'/images/importcsv/upload.csv', "r");
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
       echo "<p> $num fields in line $row: <br /></p>\n";
       $row++;
       $users = array();
       for ($c=0; $c < $num; $c++) {
            echo 'data--'.$data[$c] . "<br />\n";
        }
       $users[] =$data;
       var_dump($users);
       $collection->batchInsert($users);
    }
?>

上面的代码将数据作为两个单独的数组插入到 Mongo Collections 中,一行用于表头(CSV 表头),另一行用于数据。

现在我想将 CSV 标头与如下数据合并以导入 mongo,

{ "_id" : ObjectId("52c10f355b9e5cf00200014d"), "Name" : "Dhanam R.", "DOB" : "12-Aug-80", "Age" : "80" }

【问题讨论】:

  • 嗨,你的问题解决了吗?

标签: php mongodb yii yii-extensions


【解决方案1】:

这个问题确实可以使用谷歌搜索,但只有这一次,你要做的是获取 CSV 的第一行:

 $columns = fgetcsv($fh, 0, ',');
 $nrColumns = count($columns);
 for ($i=0; $i < $nrColumns; $i++)
 {
    if(array_key_exists($columns[$i], $columnsArray)){
        $columnsArray[$columns[$i].$col_inc] = $i;
        $col_inc++;
    }else{
        $columnsArray[$columns[$i]] = $i;
    }
 }

并使用它与您在$c 中的索引进行比较:

 $user = array();
 for ($c=0; $c < $num; $c++) {
      $user[$columnsArray[$c]] = $data[$c]
      echo 'data--'.$data[$c] . "<br />\n";
  }

然后你使用$user 添加到数组中:

$users[] =$user;

【讨论】:

    【解决方案2】:
    create CSV file in Mongo Db using php code given below:-
    <?php
    
    set_time_limit(0);
    ob_start();
    
    // connect to mongodb
    $mongo = "172.00.22.00:27017";
    $conn = new MongoClient("mongodb://$mongo");
    
    if (!$conn) {
        die("Unable to connect with mongodb");
    }
    
    $db = $conn->nexg_tmp;
    
    //header('Content-Type: application/csv');
    //header('Content-Disposition: attachment; filename=example.csv');
    //header('Pragma: no-cache');
    //$regex = new MongoRegex("/^LIV/"); 
    //$where = array('code' => $regex);
    
    $col1 = $db->ASSETS;
    $col2 = $db->BITFRAME;
    //$records = $col1->find($where)->limit(5);
    //$records = $col1->find()->limit(1500);
    $records = $col1->find();
    
    //$records = $col1->find(array('code' => 'LIV002'))->limit(5);
    
    $csvarr = array();
    $fp = fopen('example.csv', 'w');
    
    $headings[] = "Code";
    $headings[] = "CH/VOD CODE";
    $headings[] = "CH/VOD NAME";
    $headings[] = "VOD/LIVE";
    $headings[] = "URL1";
    $headings[] = "URL2";
    fputcsv($fp, $headings);
    
    foreach ($records as $val) {
    
        $csvarr = array();
        $csvarr['code'] = $val['code'];
        $csvarr['charge_code'] = $val['charge_code'];
        if (empty($val['name'])) {
            $val['name'] = $val['channel_name'];
        }
    
        /* if(empty($val['type'])){
          $val['type'] ="VOD";
          } */
    
        $csvarr['name'] = @$val['name'];
        $csvarr['type'] = @$val['type'];
    
        $rec_BitFrameCol = $col2->find(array('code' => $val['code'], 'type' => $val['type']));
        foreach ($rec_BitFrameCol as $k => $BitFrameval) {
            $csvarr['url' . $k] = $BitFrameval['url'];
        }
        fputcsv($fp, $csvarr);
    }
    echo "Completed Successfully..";
    ?>
    

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 2012-08-07
      • 2015-09-23
      • 1970-01-01
      • 2017-02-13
      • 2015-04-12
      • 1970-01-01
      • 2010-09-07
      相关资源
      最近更新 更多