1、概述
本篇文章主要用来讲述如何将MongoDB中的数据导出到EXCEL中。
下面列一下要点:
- mongoexport使用
- CSV文件中,中文乱码
- CSV文件转EXCEL文件
- 条件过滤导出数据
2、本地安装MongoDB
2.1、下载MongoDB
https://www.mongodb.com/download-center#community
2.2、安装MongoDB
按照默认的选项一步步安装即可。
2.3、使用mongoexport导出数据到CSV文件
执行以下命令导出数据
打开终端窗口,切换到MongoDB的安装目录下的bin目录,然后执行以下命令:
mongoexport -h xxxx -u xxxx -p xxxx --authenticationDatabase=admin --authenticationMechanism=SCRAM-SHA-1 --port 27017 -d xxxx -c xxxx --type=csv -f _id,name,mobile,show_count,last_login_at,active -o ./company.csv
参数说明
- -h:指明数据库宿主机的IP
- -u:指明数据库的用户名
- -p:指明数据库的密码
- --port:指明端口号
- -d:指明数据库的名字
- -c:指明collection的名字
- --type:指明要导入的文件格式
- -f:指明要导出那些列
- -q:指明导出数据的过滤条件
- -o:指明要导出的文件名
- --authenticationDatabase:指明保存用户凭证的数据库
- --authenticationMechanism:指明身份验证机制
前置条件
- 需要使用者获取MongoDB服务器IP、端口号、登录名、登录密码
- 本篇文章所用的MongoDB数据库名称为account_service
- 本篇文章所用的MongoDB数据库集合名称为company
- 本篇文章所使用的company集合的结构如下:
{
"_id" : ObjectId,
"source" : String,
"name" : String,
"mobile" : String,
"password" : String,
"license_no" : String,
"active" : String,
"xd_active" : String,
"frw_active" : String,
"allow_borrow" : String,
"merchant_id" : Array,
"last_login_ip" : String,
"last_login_at" : String,
"updated_at" : Date,
"created_at" : Date
"ec_customer_id" : String
}
3、CSV中文乱码
通过上面的步骤,我们已经可以导出MongoDB数据到CSV中,当我们用EXCEL打开CSV文件时,发现中文乱码。
中文乱码解决方案
使用“记事本”打开CSV文件,执行“另存为”命令,在“另存为”窗口,选择“编码”为“UTF-8”。打开新保存的CSV就不会出现中文乱码了。
4、将CSV文件转为EXCEL文件
EXCEL可以正常打开CSV文件,也可以另存为标准EXCEL文档格式。
四、查询(高级导出)
4.1、MongoDB与MySQL简单查询对比
| 操作 | MongoDB格式 | MongoDB示例 | MySQL示例 |
|---|---|---|---|
| 等于 | {<key>:<value>} | db.getCollection('company').find({"source":"3"}) | where source = '3' |
| 小于 | {<key>:{$lt:<value>}} | db.getCollection('company').find({"last_login_at":{$lt:"2018-07-10 17:08:05"}})) | where last_login_at < "2018-07-10 17:08:05" |
| 大于 | {<key>:{$gt:<value>}} | db.getCollection('company').find({"last_login_at":{$gt:"2018-07-10 17:08:05"}})) | where last_login_at > "2018-07-10 17:08:05" |
| 小于或等于 | {<key>:{$lte:<value>}} | db.getCollection('company').find({"last_login_at":{$lte:"2018-07-10 17:08:05"}})) | where last_login_at <= "2018-07-10 17:08:05" |
| 大于或等于 | {<key>:{$gte:<value>}} | db.getCollection('company').find({"last_login_at":{$gte:"2018-07-10 17:08:05"}})) | where last_login_at >= "2018-07-10 17:08:05" |
| 不等于 | {<key>:{$ne:<value>}} | db.getCollection('company').find({"source":{$ne:"3"}}) | where source != "3" |
| and(且) | {<key>:<value>},{<key>:<value>} | db.getCollection('company').find({"source":"5","last_login_at":{$gt:"2018-07-10 00:00:00"}}) | where source = "3" or source = "5" and last_login_at > "2018-07-10 00:00:00" |
| or(或) | {$or:[{<key>:<value>},{<key>:<value>}]} | db.getCollection('company').find({$or:[{"source":"3"},{"source":"5"}]}) | where source = "3" or source = "5" |
| and 联合 or | {<key>:<value>,$or:[{<key>:<value>},{<key>:<value>}]} | db.getCollection('company').find({"source":"5",$or:[{"last_login_at":{$gt:"2018-07-10 00:00:00"}},{"last_login_at":{$lt:"2018-06-20 00:00:00"}}]}) | where source = 5 and (last_login_at > "2018-07-10 00:00:00" or last_login_at < "2018-06-20 00:00:00") |
4.2、过滤导出的数据-示例
基础命令
mongoexport -h xxx -u xxxx -p xxxx --authenticationDatabase=admin --authenticationMechanism=SCRAM-SHA-1 --port 27017 -d account_service -c company --type=csv -f _id,name,mobile,show_count,last_login_at,active -o ./company.csv
以下命令,都是基于该命令的,即,将下列命令添加到基础命令中,便组成了完整的条件过滤导出命令。
导出 source 等于 3 的所有数据
-q "{'source':'3'}"
导出 last_login_at 大于 2018-07-10 17:08:05 的所有数据
-q "{'last_login_at':{$lt:'2018-07-10 17:08:05'}}"
导出 last_login_at 小于 2018-07-10 17:08:05 的所有数据
-q "{'last_login_at':{$gt:'2018-07-10 17:08:05'}}"
导出 last_login_at 小于或等于 2018-07-10 17:08:05 的所有数据
-q "{'last_login_at':{$lte:'2018-07-10 17:08:05'}}"
导出 last_login_at 大于或等于 2018-07-10 17:08:05 的所有数据
-q "{'last_login_at':{$gte:'2018-07-10 17:08:05'}}"
导出 source 不等于 3 的所有数据
-q "{'source':{$ne:'3'}}"
导出 source 等于 5 且 last_login_at 大于 2018-07-10 00:00:00 的所有数据
-q "{'source':'5','last_login_at':{$gt:'2018-07-10 00:00:00'}}"
导出 source 等于 3 或 source 等于 5 的所有数据
-q "{$or:[{'source':'3'},{'source':'5'}]}"
导出 source 等于 5 并且 last_login_at 大于 2018-07-10 00:00:00 或 last_login_at 小于 2018-06-20 00:00:00 的所有数据
-q "{'source':'5',$or:[{'last_login_at':{$gt:'2018-07-10 00:00:00'}},{'last_login_at':{$lt:'2018-06-20 00:00:00'}}]}"
本文详细介绍了如何从MongoDB数据库导出数据到CSV,解决CSV中文乱码问题,并转换成EXCEL文件。同时,文章还提供了一些高级查询示例,帮助过滤导出的数据。
1678

被折叠的 条评论
为什么被折叠?



