如何转储给定日期的数据

时间:2011-03-04 08:05:13

标签: mongodb

我使用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)"}}'

但它不是导出结果...我在数据库中存储了25-feb-2011和26-feb-2011的数据。我如何查询日期?

4 个答案:

答案 0 :(得分:5)

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

你可以在这里查看 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)}}'< / p>

答案 1 :(得分:2)

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

首先,我认为new Date(....)不应该在引号中(将被视为字符串文字而非日期?)。

其次,看起来新的Date(Y,M,D)不能用于指定日期 - 这会给我以下错误:

  

断言:10340:在...附近解析JSON字符串失败

我认为您需要以数字方式指定日期。 例如

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”添加了缺少的“$”。

<强>更新
Re:如何找到数值表示。不得不在mongo shell中玩一下这对我来说比较新。 这是我用mongo shell获取数字的例子(例如25-feb:

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

给出:

  

12355.2亿

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

> new Date(1235520000000)

确认这是正确的日期:

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

答案 2 :(得分:2)

不幸的是,上面的Wael的查询对我来说对mongoexport版本2.2.4不起作用,但是这个做了:

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

你必须用你自己的以上两个纪元号替换。所以mongo export命令看起来像(我用--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)}}]}'

答案 3 :(得分:1)

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