Heim  >  Artikel  >  Backend-Entwicklung  >  Problemlösung beim Exportieren der Mongo-Bibliothek nach lokal

Problemlösung beim Exportieren der Mongo-Bibliothek nach lokal

不言
不言Original
2018-07-10 15:24:521430Durchsuche

In diesem Artikel geht es hauptsächlich um den Export der Mongo-Bibliothek nach lokal, was einen gewissen Referenzwert hat. Jetzt kann ich ihn mit allen teilen, die ihn brauchen.

Anforderungen:

In yii Exportieren Sie im Rahmen des Frameworks die Daten in der Produktions-Mongo-Bibliothek in eine JSON-Datei und laden Sie sie in den lokalen

Aufruf herunter:

1

 public function actionExport()
    {
        public $target='/WWW/web/html/import/';  //windows 导出文件所在目录
        $export =new Export($target,'QuestionUser',96);
    }
2. Erstellen Sie Export.php unter /web/model

<?php
/*导出mongo库中的数据
* @author lizhihui 
* @date 2018-5-29
* 调用例子:Export(&#39;MyModel&#39;,96);    //导出数据库MyModel中qId为96的数据
*/
Class Export
{
    public $target;
    public $model;    //数据库对象 string,例如:&#39;QuestionAnswer&#39;,&#39;QuestionUser&#39;
    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(
                &#39;conditions&#39;=>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;
    }
}
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich ist Achtung auf die chinesische PHP-Website!

Verwandte Empfehlungen:

So scannen Sie Dateien in einem Verzeichnis und geben sie in die Datenbank im yii-Framework ein

Das obige ist der detaillierte Inhalt vonProblemlösung beim Exportieren der Mongo-Bibliothek nach lokal. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn