Mongo Export Csv

Posted by 瞿广 on Tuesday, January 29, 2019

TOC

mongo 上查询数据,导出excel,并解决Mac上的Excel在导入CSV文件不支持utf-8的问题

一、导出方法

控制台命令如下:

mongo localhost:27017/cdd-prejudication /path/to/query.js > xxx.csv

query.js 是根据你的mongo查询语句编写,主要是在后面用 for循环打印输出的字段,用逗号分割,这样就能拼成csv文件

我的query.js如下:

db.getCollection('cdd-prejudication.pengyuan_phoneNoCheck_rsp')
.aggregate(
  [
    {$unwind:'$response.returnValue.cisReport'},
    {$project:{reportID:'$response.returnValue.cisReport.reportID',username:'$username',idCard:'$idCard'}}
  ])
.forEach(
    function(document) {
        print("\t"+document.reportID + "," + document.username + ",\t" + document.idCard+"");
    }
)

根据自己的需要自行编写

二、问题

1.csv文件会中文乱码(Mac上的Excel在导入CSV文件不支持utf-8)

vim 源文件

使用查看文件编码 :set fileencoding

通过Mac上的iconv工具将文件编码由UTF8转为GB18030

iconv -f UTF8 -t GB18030 源文件.csv >新文件.csv

2. 科学计数法问题

  • 解决办法: 只要把数字字段后面加上显示上看不见的字符即可,字符串前面或者结尾加上制表符”\t”.

三、aggregation $unwind例子

需要解析数组,必须使用mongo的 Aggregation Pipeline命令了

有如下结构的数据:

{ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] }

下面的 aggregation $unwind 将数组遍历

db.inventory.aggregate( [ { $unwind : "$sizes" } ] )

返回结果,变成了三条

{ "_id" : 1, "item" : "ABC1", "sizes" : "S" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "M" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "L" }