【MongoDB】MongoDB导出EXCEL格式数据

本文详细介绍了如何从MongoDB数据库导出数据到CSV,解决CSV中文乱码问题,并转换成EXCEL文件。同时,文章还提供了一些高级查询示例,帮助过滤导出的数据。

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'}}]}"

转载于:https://my.oschina.net/zobeen/blog/2250156

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值