這篇文章主要介紹了關於匯出mongo庫到本地,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
需求:
在yii架構架下,匯出生產mongo庫中的資料到json檔案,下載到本地
調用:
1.在/web/Controllers/TestController.php下引用
public function actionExport() { public $target='/WWW/web/html/import/'; //windows 匯出檔案所在目錄 $export =new Export($target,'QuestionUser',96); }
2.在/web/model下建立Export.php
<?php/*匯出mongo庫中的資料* @author lizhihui * @date 2018-5-29* 調用例子:Export('MyModel',96); //匯出資料庫MyModel中qId為96的資料*/Class Export{ public $target; public $model; //資料庫物件 string,例如:'QuestionAnswer','QuestionUser' public $qId; //問卷id int public $db; /* * $target 匯出檔案所在目錄 * $model * $qId */ public function __construct($target,$model,$qId) { $this->target = $target; $this->db=$model; $this->model = new $model; $this->qId = (int)$qId; $this->export(); } /** * 匯出mongo生產資料用於本地測試 * @author lizhihui * @date 2018-5-29 */ public function Export() { $iCount = $this->model->count(array( 'conditions'=>array( 'qId'=>array('equals' => $this->qId), )) ); if(!$iCount){ $this->showMessage('資料為空白'); } $nStart = 0; //起始記錄 $nCount = 100; //每次處理記錄數 $nPage = intval($iCount/$nCount)+1; $aReault=array(); for ($i=0;$i<$nPage;) { $sWhere = array( 'conditions'=>array( 'qId'=>array('equals' => $qId), ), 'limit'=>$nCount, 'offset'=>$nStart, ); $arr = $this->model->findAll($sWhere); if(!is_dir($this->target)){ mkdir($this->target); } //寫入檔案 $limit = 1000;//每隔$limit行,重新整理一下輸出buffer,不要太大,也不要太小 foreach ($arr as $key => $val) { if($key!=0 && $key%$limit==0){ ob_flush(); flush(); } $attr=$val->attributes; //整理資料,刪除不必要的索引值 unset($attr['_id']); unset($attr['current_db']); unset($attr['pageInfo']); $aReault[]=$attr; } $i++; $nStart = $i*$nCount; } $filePath=$this->target.$this->db.'_'.$this->qId.'.json'; file_put_contents($filePath,json_encode($aReault)); //下載檔案 if(!file_exists($filePath)){ $this->showMessage('目標檔案不存在!'); } header('Content-Type: application/json'); header('Content-Disposition: attachment; filename='.$this->db.'_'.$this->qId.'.json'); header('Accept-Ranges: bytes'); echo file_get_contents($filePath); } /** * 資訊輸出 */ private function showMessage($str, $err = 0) { if (!$str) { return false; } if ($err) { echo "[ERROR]"; } else { echo "[SUCCESS]"; } echo date("Y-m-d H:i:s", time()) . " " . $str . "\n"; exit; }}
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!