软件
Mongodb 3
描述
依照老板需求对MongoDB的数据进行导出,第三方软件Navicate导出速度过慢且内存占用严重,进而采用MongoDB自带的命令行工具MongoExport进行导出。此文章指引使用MongoExport对MongoDB的数据表进行导出,并进阶提供带有过滤条件的导出的指南。
解决方案
命令行参数注释
以下是MongoExport常用的导出参数
-h | 指定要连接的数据库域名或地址 |
--port= | 指定要连接的数据库端口 |
-u | 指定连接到数据库的用户名 |
-p | 指定连接到数据库的密码 |
--authenticationDatabase= | 指定该数据库服务器的认证数据库 |
--db= | 指定要导出的表所在的数据库 |
-c | 指定要导出的表 |
--type= | 指定导出的格式,支持两种格式json和csv |
-f | 指定要导出哪些列,导出格式为csv时必须指定此参数。若指定的列包含聚合列,则只会将该列中的各子列数据作为Json导出在聚合列所在的列,偷懒不得这点需要注意。 |
-o | 指定导出的文件 |
--query= | 指定相应的查询语句一遍对数据进行筛选,可以用于导出部分数据。若不指定,则导出全部数据 |
这次老板要导出的数据如果不进行过滤,则可能会导出超过5个G的CSV文件,因此采用--query参数按月进行筛选过滤,所幸的是各表中都有一列trading_day以字符串的方式记录了记录的发生日期,格式像这样: 2018-10-01
基本的导出查询语句
以下是一开始的导出语句
> mongoexport -u 用户名 -p 密码 --authenticationDatabase=认证数据库 --db=要导出表所在的数据库 --type=csv -f 列1,列2,列3,...列N...,trading_day -c 要导出的表 --query='{"trading_day":{$gte:"2018-10-01",$lte:"2018-10-31"}}' -o 导出路径/导出文件名.csv |
针对以上语句,依照顺序导出月份时,需要更改$gte:后的日期、$lte:后的日期来对数据进行按月(其实也可以精确到日)的过滤。更改-c后面的参数来导出其他表,同时更改-o参数来更改导出的文件名。
讨巧的办法
上述方法导出每个月的数据都要设置该月的起始日期和结束日期,每个月的天数又不一样。反正都是依照整月为单位,有没有更方便的方法?当然有!反正trading_day是字符串值的,正好取日期的前两位取到月份(像这样: 2018-10),然后采用正则表达式做匹配,查了下文档,MongoDB原生支持正则表达式,则我们将上述导出查询语句修改如下:
> mongoexport -u 用户名 -p 密码 --authenticationDatabase=认证数据库 --db=要导出表所在的数据库 --type=csv -f 列1</i>,列2,列3,...列N...,trading_day -c 要导出的表 --query='{"trading_day":{$regex:"^2018-10"}}' -o 导出路径/导出文件名.csv |
针对以上语句,依照顺序导出月份时,只需要修改一下$regex:后的月份来对数据进行按月的过滤。
请注意,本站的所有文章均要求阁下在转载时注明出处和原作者,阁下转载本站文章即表示阁下同意并遵守此规程,除非特别注明转载出处,否则文章即为其发布者所著。本站及文章作者保留文章的著作权并有权在阁下违反上述规程时予以追究。
本文链接地址: Mongodb导出csv