我使用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的数据。我如何查询日期?
答案 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范围作为月份值。