上班有个需求,协助提取某数据系统中cashloanDb
涉及MongoDB集合:cardBill(时间段6.1 - -8.28),cardReport(时间段2.1 - -8.28)
如果不支持根据时间提取,可提取全量数据。
使用mongo客户端命令进入数据库:
jsfkrs0: PRIMARY>show dbs;
2018 - 09 - 04 - t17:35:57.692 + 0800 E查询(thread1)错误:listDatabases失败:{
“ok":0,
“errmsg":“未授权> br/> _getErrorWithCode@src/mongo shell/utils.js: 25:13
br/> shellHelper.show@src/mongo shell/utils.js: 769:19
br/> @ (shellhelp2): 1:1
jsfkrs0: PRIMARY>使用管理
转向db管理
jsfkrs0: PRIMARY>db.auth (“mangoadmin”,“密码”)
1
jsfkrs0: PRIMARY>show dbs;
管理0.000 gb
cashloanDb 96.287 gb
fuf_mgdb当地1.280 gb 0.765 gb
切换至我们要操作的db中
jsfkrs0: PRIMARY>使用cashloanDb
转向db cashloanDb
看一下这两个集合的全量数据有多少
jsfkrs0: PRIMARY>db.cardBill.count ();
247126
jsfkrs0: PRIMARY>db.cardReport.count(); 249128年
先看一下这个表里面有没有时间戳我们取一条数据来看,有的话,我们可以基于这个时间戳来进行导出工作,
jsfkrs0: PRIMARY>db.cardBill.findOne ();
{
“_id":ObjectId (“59 e180110cxxxxxx"),
“timestamp":NumberLong(“<强> 1507950609625 强>“),
“taskId":“xxxxxx-b08d-11e7-bf17-xxxxx",
“bill":“[{\ \“平衡”:47000.00,\“存款\“:[],\“账单\“:[{\ \“部分“:[],\“bill_id \“: \“d81f1e60 a02d - 11 - e7 a63a - 00163 e0dfac7 \“, \“bill_type \“: \“\“做,\“bank_name \“: \“中信银行\”,\“bill_month \“: \“2017 - 04 \”, \“bill_date \“: \“2017-04-14 \”, \“payment_due
这个时间戳有13位,精确到了毫秒,我们在导出的时候需要换算成Unix时间戳,并且也精确到毫秒才可以。
http://tool.chinaz.com/Tools/unixtime.aspx
正常换算出来的只到秒位,只有10位。可以直接在换算出的Unix时间戳后面加000,或者换算的时候直接精确到毫秒,下来我们就可以用MangoDB自带的导出工具进行导出;
mongoexport - d cashloanDb - c cardBill-uadmin -ppassword——authenticationDatabase“admin"q’{“timestamp": {$ gte: NumberLong (“1517414400000”), $ lte: NumberLong (“1535472000000“)}} ' - o cardBill.json