这篇文章主要介绍了关于导出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
$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;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐: