關於如何匯出mongo庫到本地的問題解決

來源:互聯網
上載者:User
這篇文章主要介紹了關於匯出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!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.