MongoDB 导出csv文件

一般情况, 采集到的数据会按目标格式存储, 但是我们的应用场景比较多, 很难一次性满足所有需求.

所以数据采集的时候, 采集到数据库, 然后再当使用的时候, 再进一步转换数据格式.

mongoexport

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 直接从某个表导出期望字段,生成CSV
mongoexport \
--host localhost \
--db kline \
--collection kline_binance \
--type=csv \
--out kline.csv \
--fields 'interval,symbol,time,open,high,low,close,volume'

# 增加一个检索filter后导出CSV
mongoexport \
--host localhost \
--db kline \
--collection kline_binance \
--queryFile ./filter.json \
--type=csv \
--out kline.csv \
--fields 'interval,symbol,time,open,high,low,close,volume'

# cat filter.json
{"exchange":"binance","interval":"15m",symbol:"NEO_USDT"}

支持参数的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

QFILE=$1
if [ "$QFILE" == "" ] || [ ! -f $QFILE ]; then
echo "Usage: $0 QueryFile [TargetName]"
exit 1
fi

TFILE=$2
if [ "$TFILE" == "" ]; then
TFILE="./${QFILE}.csv"
fi

if [ -f $QFILE ]; then
mongoexport --db quant --collection kline --type=csv --queryFile $QFILE --out $TFILE --fields "time,open,high,low,close,volume"
fi

使用 JS 查询语句

原生查询语句

1
db.kline_binance.find({}, {interval:1,symbol:1,time:1,open:1,high:1,low:1,close:1,volume:1});

改成 js 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
db.kline_binance
.find(
{},
{
interval: 1,
symbol: 1,
time: 1,
open: 1,
high: 1,
low: 1,
close: 1,
volume: 1
}
)
.forEach(function(doc) {
print(
doc.interval +
',' +
doc.symbol +
',' +
doc.time +
',' +
doc.open +
',' +
doc.high +
',' +
doc.low +
',' +
doc.close +
',' +
doc.volume
);
});

运行导出命令

1
2
mongo kline filter.js > kline.csv
mongo <数据库名> <检索语句文件> > <导出文件>.csv
Donate - Support to make this site better.
捐助 - 支持我让我做得更好.