【问题标题】:Mongoexport -q ISODate queryMongoexport -q ISODate 查询
【发布时间】:2014-12-21 16:03:07
【问题描述】:

我正在尝试运行这个:

mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{'time':{'$gte': ISODate('2014-12-21 12:57:00.506Z'),'$lt': ISODate('2014-12-21 12:59:00.506Z')}}"

或者这个(没有 - ' 的 gte & lt):

mongoexport.exe -h *MYHOST* -p *MYPORT* -q {'time':{$gte: ISODate('2014-12-21 12:57:00.506Z'),$lt: ISODate('2014-12-21 12:59:00.506Z')}}

查询在 Robomongo 上运行良好,但使用 mongoexport 时会抛出:“位置参数太多”

我知道我可以运行以下命令,但我不想每次需要执行查询时都使用日期转换器。

mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{'time':{$gte: new Date(14191
66620506),$lt: new Date(1419166740506)}}"

【问题讨论】:

标签: mongodb isodate


【解决方案1】:

mongoexport 查询需要使用严格模式的 MongoDB 扩展 JSON。您可以在extended JSON 上的 MongoDB 手册文章中阅读更多关于扩展 JSON 的信息。在您的特定情况下,在 mongoexport 命令中编写第一个查询的正确方法是

mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{ 'time' : { '$gte' : { '$date' : '2014-12-21 12:57:00.506Z' },'$lt' : { '$date' : '2014-12-21 12:59:00.506Z' } } }"

【讨论】:

  • 这个答案还有效吗?通过字符串而不是 ISODate 查询似乎不会返回任何结果,而添加 ISODate("") 构造函数将返回结果 - 直接在 mongo shell 中。在 mongoexports 中,添加 ISODate("")(或 JS Date 对象)构造函数会导致错误。
  • 这似乎可以正常工作,但时间戳可能非常挑剔。纪元时间必须格式化为包含毫秒和 iso 时间(如上面的字符串)必须包含微秒。
  • 另外,如果你写像“2015-10-18T00:00:00Z00:00”这样的时间戳,那么 mongoexport 会抱怨额外的文本:00:00。
  • 在 Mac 上我无法让它工作。我不得不使用:mongoexport -d myDb -c myCollection -q '{ "timestamp" : { "$gte" : { "$date" : "2015-11-01T12:57:00.000Z" }}}'注意:双引号必须在字符串内,单引号外。
  • 这不是 mongo 3.x 的有效答案。
【解决方案2】:

我使用@wdberkeley 的答案作为起点,但那个特定的日期字符串对我不起作用。我不得不使用“T”来分隔日期和时间:

mongoexport --username user --password pass --host host --db dbName --collection coll --type=csv --query '{"_created_at": { "$gte" : { "$date" : "2017-12-21T12:57:00.506Z" } }}'

【讨论】:

    【解决方案3】:

    我在使用 mongo 2.4 时遇到了同样的问题,您需要将 $date 与 “毫秒的 64 位有符号整数” (https://docs.mongodb.com/v2.4/reference/mongodb-extended-json/) 在你的情况下:

    mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{'time':{'$gte':{"$date": 1419166620506},'$lt': {"$date": 1419166740506}}"
    

    【讨论】:

      【解决方案4】:

      不得不在 windows 中使用不同的语法。

      mongoexport --host 192.168.1.5 --db dbname --collection files --query "{ "ModifyDate" : { "$lte" : { "$date" : '2019-02-17T00:00:00.000Z' } }}"
      

      区别在于日期周围的单引号。

      【讨论】:

        【解决方案5】:

        2021 年末适用于 Windows 的更新:

        考虑 Git Bash 来运行它,因为我无法让它在 Windows 终端中运行

        mongoexport --hostname=$MYHOST --password=$MYPWD --query='{"time":{"$gte":{"$date":"2014-12-21 12:57:00.506Z"},"$lt":{"$date":"2014-12-21 12:59:00.506Z"}}}' mongodb://IP --out=myoutfile.json

        【讨论】:

          【解决方案6】:

          我在 Windows 上有 mongoexport 版本 3.6.1。我必须使用 Git Bash 作为 Fabien Haddadi,但在我的情况下,日期以毫秒为单位

          -query '{ "Time": { "$gte": new Date(1609455600000)} }' 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-14
            • 1970-01-01
            • 2018-09-03
            • 2021-11-23
            相关资源
            最近更新 更多