mongodump按日期导出数据

参考文章:

  • MongoDB 日期查询与mongodump 按日期范围导出数据
  • mongodump按照日期时间范围导出数据
  • Mongodb完全使用教程
线上项目使用单机mongodb存储数据,由于每次导出需要先去加密,因为每次导出的数据不能太多,这里利用mongodump按照时间条件查询数据
官网看了相关文档,不过没看懂,,解决问题就行了,剩下的交给DBA
mongodb查询时间戳可使用Date和ISODate两种方式 Date
如果我想要取2017.3到2017.6的数据条数:
db.session_1.find({"timestamp":{$gte:new Date(2017,3,1)},"timestamp":{$lte:new Date(2017,6,1)}}).count()

不过我发现用Date卡时间不管用,可能是库里数据的问题,只支持ISODate
ISODate
查询大于等于北京时间2017.9.1 凌晨的数据记录,也就是2017.9.1 凌晨至今的数据记录。ISODate指的是标准时间,东八时区相差8小时
db.session_1.find({"timestamp":{$gte:ISODate("2017-09-01T16:00:00Z")}}).count()

mongodump按日期导出数据 mongodump 的--query-q选项可以指定查询范围,但不支持ISODate格式:
root@doushuo-virtual-machine:~# mongodump --port 27017 -d my_db -c my_collection -q '{"timestamp":{$gte:ISODate("2017-06-01T16:00:00Z")}}' -o test connected to: 127.0.0.1:27017 assertion: 16619 code FailedToParse: FailedToParse: Bad characters in value: offset:19 root@doushuo-virtual-machine:~#

将时间戳转换为毫秒:
root@doushuo-virtual-machine:~# date -d 2017-06-01 +%s 1496246400

毫秒补三个0,即可正常导出:
root@doushuo-virtual-machine:~# mongodump --port 27017 -d my_db -c my_collection -q '{"timestamp":{$gte:Date(1496246400000)}}' -o test connected to: 127.0.0.1:27017 Thu Dec 28 00:38:13.846 DATABASE: my_dbtotest/my_db Thu Dec 28 00:38:13.870my_db.my_collection to test/my_db/my_collection.bson Thu Dec 28 00:38:17.155Collection File Writing Progress: 10000/1079657 0%(objects) Thu Dec 28 00:38:20.009Collection File Writing Progress: 26400/1079657 2%(objects) Thu Dec 28 00:38:23.010Collection File Writing Progress: 46000/1079657 4%(objects)

mongodb条件操作符 【mongodump按日期导出数据】用于比较表达式的值,从库中取数据:
  • $gt 大于(>)
  • $lt 小于(<)
  • $gte 大于等于(>=)
  • $lte 小于等于(<=)

    推荐阅读