如何使用mongodump转储与特定日期范围匹配的记录?

时间:2011-08-09 13:35:48

标签: mongodb

我正在尝试使用mongodump命令转储在特定日期创建的一堆记录。记录包括一个“ts”字段,它是一个MongoDB Date()对象。

mongodump采用-q参数,该参数可用于运行查询以选择要包含在转储中的记录。不幸的是,-q参数需要在JSON中提供,并且不清楚如何在纯JSON中表达“少于此日期,超过此日期”的查询(通常这样的查询将使用' new Date()'constructor)“

任何提示?我尝试过使用{$ date:unix-timestamp-in-milliseconds}格式,但它对我不起作用。

8 个答案:

答案 0 :(得分:52)

我解决了 - 我正在寻找的神奇咒语是:

mongodump --query "{\"ts\":{\"\$gt\":{\"\$date\":`date -d 2011-08-10 +%s`000},\"\$lte\":{\"\$date\":`date -d 2011-08-11 +%s`000}}}"

答案 1 :(得分:24)

比@ SimonWillison的转义版更人性化的版本:

--query "{ time: { \$gt: new Date(1312959600000), \$lt: new Date(1313046000000) }}"

(注意,仍然需要转义美元符号。)

我通过在shell中创建日期来获得毫秒时间戳,例如:

> var targetDateStart = new Date(2011, 7, 10);
> var targetDateEnd = new Date(2011, 7, 11);
> targetDateStart.getTime();
1312959600000
> targetDateEnd.getTime();
1313046000000

答案 2 :(得分:13)

在MongoDB 3.2中,我们可以使用--queryFile选项和mongodump。

首先,创建一个json文件:

//query.json
{"serverTime": {"$gte": ISODate("2016-01-30T16:00:00.000Z"), "$lt": ISODate("2016-01-31T16:00:00.000Z")}}

接下来,使用mongodump:

mongodump --db <dbName> --collection <collectionName> --queryFile query.json

简单明了。

答案 3 :(得分:7)

编辑:修正拼写错误

添加更新:

  1. mongodump --query不支持IsoDate,但会以毫秒为单位接受Date

  2. 由于date命令在OS X中的行为不同,date -d 2011-08-10 +%s对我不起作用。如果您遇到同样的问题,请尝试阅读手册或使用:

    • 以秒为单位获取当前时间:

      date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
      
    • 以秒为单位获取具体时间:

      date -j -f "%Y-%m-%d %H:%M:%S" "2014-01-01 00:00:00"  "+%s"
      
  3. 使用单引号版本以避免转义。

    mongodump --query '{updated_at: { $gte: Date(1403280000000) } }'
    

答案 4 :(得分:4)

这应该有用,什么对你的$ date查询无效? :

mongodump --query  {"ts":{$gt:{$date:178929000}}}

答案 5 :(得分:4)

在查询周围使用单引号。我发现ISODate()不起作用。

mongodump --query  '{"ts":{$gt:{$date:178929000}}}'

答案 6 :(得分:0)

就我而言,我查询了14天前创建的条目,并以以下bash脚本结尾:

#!/bin/bash
date_now=`date +%s%3N`
date_2weeks_ago=$[date_now - 14 * 24 * 60 * 60 * 1000]
query=$(printf '{ createdAt: { $gte: Date(%d) } }' $date_2weeks_ago)
echo $query > query.json
mongodump \
--collection=data \
--queryFile=query.json
rm query.json

mongodump版本:r4.0.12

答案 7 :(得分:0)

扩展的JSON格式有效,如文档(https://docs.mongodb.com/database-tools/mongodump/)中所述。示例:

--query '{ "timest": { "$gte": { "$date": "2020-08-19T00:00:00.000Z" } } }'