Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongoexport日期范围查询结果解析失败_Mongodb_Mongoexport - Fatal编程技术网

Mongodb 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,但查询参数有问题

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时间戳?