MongoDB中的数据导出为excel CSV或txt文件

时间:2024-03-18 08:55:52

1、mongoexport命令主要参数

mongoexport命令用于数据的导出,导出的文件格式默认为JSON格式。当然也可以指定特定的文件格式如CSV和txt

mongoexport --help
#列出常用的参数         
说明:
-h:--host,数据库宿主机的IP,后面常接--port参数一起,默认是27017
-u:--username,数据库用户名
-p:--password,数据库密码
-d:--db,数据库名字;
-c:--collection,数据表,集合的名字
-f:--fields,导出的列名,需要提取的列名用逗号分隔  
-q:--query,导出数据的过滤条件
-o: --out,指定文件名
--csv:导出格式为csv

2、导出Excel CSV示例

mongo -uadmin -p\'Lgu>6B34pZnv*iU\' 172.17.2.174:27017/userRecord  #指定用户名密码和库登录
> db.userRecord.find().count(); #统计多少条数据,或直接省略find:db.userRecord.count()
> db.userRecord.find(); #查看数据,默认显示20条
> show collections; #查看集合列表

 将集合userRecord所有字段导出数据为Excel CSV格式

mongoexport -h172.17.2.174 --port27017 -u admin -p\'Lgu>6B34pZnv*iU\' -d userRecord -c userRecord -f _id,accessTime,accessType,interfaceName,tokenInfo,userIp,userName --csv -o /home/bakup/userRecord.csv

3、导出txt示例

将集合userRecord所有字段导出数据为txt格式

mongoexport -h172.17.2.174 --port 27017 -u admin -p\'Lgu>6B34pZnv*iU\' -d userRecord -c userRecord -f _id,accessTime,accessType,interfaceName,tokenInfo,userIp,userName -o /home/bakup/userRecord.txt

4、使用mail以附件形式发送邮件

4.1 编写/etc/mail.rc,添加邮箱server端

vim /etc/mail.rc #最后一行添加
set
bsdcompat ##### set example for 163 ###### set from=1361125xxxx@163.com smtp=smtp.163.com set smtp-auth-user=1361125xxxx smtp-auth-password=wxxxxx smtp-auth=login

4.2 编写shell,加入定时任务

#!/bin/bash
file=userRecord.csv
HOST=172.17.2.174
PORT=27017
user="admin"
password="Lgu>6B34pZnv*iU"
dbname="userRecord"
collection="userRecord"
find /home/bakup/ -type f -name "${file}" -mtime +3 -exec rm -f {} \;
[ -f /home/bakup/${file} ] || mongoexport -h $HOST --port $PORT -u$user -p $password -d $dbname -c $collection -f _id,accessTime,accessType,interfaceName,tokenInfo,userIp,userName --csv -o /home/bakup/$file
sleep 2
[ -s /home/bakup/$file ] && echo -e "\033[36m  $file is exist\033[0m" || echo -e "\033[31m  $file is not exist\033[0m"
echo "`date +%F-周%w-%H:%M:%S`" >/server/scripts/date.txt
 for i in `cat /server/scripts/mail.txt`
     do
           mail -s "用户访问记录" -a /home/bakup/$file $i < /server/scripts/date.txt
           sleep 1
           echo -e "\033[32m 邮件发送中@$i......\033[0m"
done
View Code