【问题标题】:How do I dump data for a given date如何转储给定日期的数据
【发布时间】:2013-07-06 06:29:54
【问题描述】:

我正在使用 mongoexport 导出给定日期的数据。我的命令是这样的

mongoexport -d project -c coll  --csv -o result -f source -q '{"date":{"$gte":"new Date(2011,1,25)","lt":"new Date(2011,2,26)"}}'

但它没有导出结果...我在数据库中存储了 2011 年 2 月 25 日和 2011 年 2 月 26 日的数据...如何查询日期?

【问题讨论】:

  • 不应该是“$lt”吗?
  • 没有查询就可以导出吗?如果是这样,我想你应该使用'$ lte'而不是'lt',一切都会好起来的
  • 是的,没有查询就可以导出..我只使用$lt...我在这里错误地输入了“lt”..可能是什么原因..为什么它不工作

标签: mongodb


【解决方案1】:

我遇到了同样的问题。我通过使用纪元时间修复了它。

你可以在这里查看 http://www.epochconverter.com/

我用的是java ..所以我用了

日期 x = 新日期(年、月、日)

并使用 x.getTime() 获取纪元并将其发送到 mongoexport

所以你的 mongo 导出语句应该是

mongoexport -d project -c coll --csv -o result -f source -q '{"date":{$gte:(Date(1295913600)),$lt:(Date(1298678400)}}'

【讨论】:

    【解决方案2】:

    我认为问题在于您指定日期的方式。

    首先,我认为new Date(....) 不应该用引号引起来(会被视为字符串文字而不是日期?)。

    其次,这里似乎不能使用新的Date(Y,M,D) 来指定日期 - 这给了我以下错误:

    Assertion: 10340:Failure parsing JSON string near...

    我认为您需要以数字方式指定日期。
    例如
    new Date(1234567890)

    所以整个事情会是这样的:

    mongoexport -d project -c coll  --csv -o result -f source -q '{"date":{"$gte":new Date(x)","$lt":new Date(y)}}'
    

    其中 x = 开始日期的数字表示,y = 结束日期。 此外,如前所述,为“lt”添加了缺失的“$”。

    更新:
    回复:如何找到数字表示。不得不在 mongo shell 中玩一下,这对我自己来说是相对较新的。 这是我在 mongo shell 中获取数字的示例(例如,对于 25-feb:

    > new Date(2009,1,25) * 1
    

    给出:

    1235520000000

    再次在 shell 中,如果你这样做:

    > new Date(1235520000000)
    

    它将确认它是正确的日期:

    ISODate("2009-02-25T00:00:00Z")
    

    【讨论】:

    • 那么我如何获得日期的数字表示
    【解决方案3】:

    不幸的是,上面的 Wael 查询不适用于 mongoexport 2.2.4 版,但这个可以:

    $and:[{date:{$gte:new Date(1372801816000)}},{date:{$lt:new Date(1373061846000)}}]}
    

    你必须用你自己的替换上面的两个纪元。所以 mongo 导出命令看起来像(我使用 --jsonArray 而不是 --csv)

    mongoexport -h your_host:port -d your_db -c your_collection --jsonArray -o output.js -q '{$and:[{date:{$gte:new Date(time_stamp_1)}},{date:{$lt:new Date(time_stamp_2)}}]}'
    

    【讨论】:

      【解决方案4】:

      我刚刚遇到这个问题,似乎原始帖子中的问题是new Date(2011,2,26) 不应该用引号括起来,而"lt" 应该是"$lt"。此外,new Date(2011,2,26) 是 2011 年 3 月 26 日,因为 javascript 使用 0-11 的月份值范围。

      【讨论】:

        猜你喜欢
        • 2012-06-28
        • 1970-01-01
        • 2023-01-18
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        • 2015-06-05
        • 2019-08-23
        • 1970-01-01
        相关资源
        最近更新 更多