Mongodb Mongoexport日期范围查询结果解析失败
正在尝试运行mongoexport,但查询参数有问题Mongodb Mongoexport日期范围查询结果解析失败,mongodb,mongoexport,Mongodb,Mongoexport,正在尝试运行mongoexport,但查询参数有问题 mongoexport -d test-copy -c collection -o /home/ubuntu/mongodb-archiving/mongodump/collection.json --query '{"created_at": {\$lte: new Date(1451577599000) } }' 藏品包括: {“创建时间”:ISODate(“2014-03-07T06:32:19.172Z”)} 我可以在Mongo客
mongoexport -d test-copy -c collection -o /home/ubuntu/mongodb-archiving/mongodump/collection.json --query '{"created_at": {\$lte: new Date(1451577599000) } }'
藏品包括:
{“创建时间”:ISODate(“2014-03-07T06:32:19.172Z”)}
我可以在Mongo客户端中查询到它
结果将导致以下错误:
断言:10340:解析“created_a”附近的JSON字符串失败
您的查询中有一个
\
。请将其删除
--query '{"created_at": {$lte: new Date(1451577599000)}}'
mongoexport
和mongodump
工具要求--query
参数使用有效的JSON对象。来源:
--查询,-q
提供一个JSON文档作为查询,可以选择限制mongodump输出中包含的文档
必须用单引号(例如.)括起查询,以确保它不会与shell环境交互
由于传递到mongoexport
的查询参数不是有效的JSON对象,因此该命令失败,因为存在作为Javascript语句的new Date()
所需的修改只需使用您提供的示例ISODate()
对象即可。例如:
mongoexport -d test-copy -c collection -o /home/ubuntu/mongodb-archiving/mongodump/collection.json --query '{"created_at": {$lte: ISODate("2014-03-07T06:32:19.172Z") } }'
您只需将ISODate()的内容替换为所需的日期。您应在mongoexport中使用$date:
mongoexport.exe -h *HOST* -p *PORT* -q "{ 'created_at' : { '$lt' : { '$date' : '2014-03-07T06:32:19.172Z' } } }"
删除
\$lte
并在查询中将其更改为quoted“$lt”
,mongodump将正常工作。
在mongodb 3.0.8上测试
> use appdb
> db.testcoll.find({})
{ "_id" : 1, "created_at" : ISODate("2016-09-15T08:46:12.272Z") }
{ "_id" : 2, "created_at" : ISODate("2016-09-15T08:46:12.272Z") }
{ "_id" : 3, "created_at" : ISODate("2016-09-16T08:46:30.736Z") }
{ "_id" : 4, "created_at" : ISODate("2016-09-16T08:47:12.368Z") }
{ "_id" : 5, "created_at" : ISODate("2016-09-16T08:47:15.562Z") }
> db.testcoll.find({"created_at":{"$lt":new Date("2016-09-16")}})
{ "_id" : 1, "created_at" : ISODate("2016-09-15T08:46:12.272Z") }
{ "_id" : 2, "created_at" : ISODate("2016-09-15T08:46:12.272Z") }
> db.testcoll.find({"created_at":{"$lt":new Date(1473984000)}})
// make sure you are using millisecond version of epoch
> db.testcoll.find({"created_at":{"$lt":new Date(1473984000000)}})
{ "_id" : 1, "created_at" : ISODate("2016-09-15T08:46:12.272Z") }
{ "_id" : 2, "created_at" : ISODate("2016-09-15T08:46:12.272Z") }
现在是mongodump部分:
dp@xyz:~$ mongodump -d appdb -c testcoll --query '{"created_at":{"$lt":new Date(1473984000000)}}'
2016-09-16T14:21:27.695+0530 writing appdb.testcoll to dump/appdb/testcoll.bson
2016-09-16T14:21:27.696+0530 writing appdb.testcoll metadata to dump/appdb/testcoll.metadata.json
2016-09-16T14:21:27.708+0530 done dumping appdb.testcoll (2 documents)
我认为你不能在
mongoexport
命令中指定日期。我已经解决了:打开shell命令,使用日期参数查询并将其保存到collection2。然后export collection2没有出现错误,但也没有导出任何记录。使用此--query'{“created_at:”{$lte:ISODate(“2015-11-31T23:59:59.599Z”)查询{“
并获得Sun Sep 18 16:27:43断言:10340:解析JSON字符串失败:“created_a
您的MongoDB版本是什么?您能试着运行mongoexport--version
?我在MongoDB 3.2.9中使用了这个命令,它按预期工作:mongoexport-d test-c test--query'{created_at:{$lte:ISODate:}(“2016-09-19T00:00:00Z”)}}
使用2.0.4版,这解释了命令不起作用的原因。我相信MongoDB 2.0版的mongoexport
只支持--query
参数中的简单JSON文档(例如,它不支持$lte
操作符).MongoDB 2.0.x的使用寿命已于2013年3月结束,因此如果可能,我建议升级到最新版本(目前为3.2.9),该版本可以执行所需的ISODate
查询。谢谢@KevinAdistambha,目前我们无法升级到最新版本n。我们将决定使用新日期()
Javascript方法。是否使用Unix时间戳?