Mongoexport日期范围查询结果在解析失败

时间:2016-09-16 06:13:03

标签: mongodb mongoexport

尝试运行mongoexport并查询我的查询参数。

mongoexport -d test-copy  -c collection -o /home/ubuntu/mongodb-archiving/mongodump/collection.json --query '{"created_at": {\$lte: new Date(1451577599000) } }'

收集是:

{"created_at" : ISODate("2014-03-07T06:32:19.172Z")}

我可以在Mongo Client中查询。

导致以下错误:

  

断言:10340:解析JSON字符串附近失败:“created_a

4 个答案:

答案 0 :(得分:2)

您的查询中有\。请删除它。

--query '{"created_at": {$lte: new Date(1451577599000)}}'

答案 1 :(得分:0)

mongoexportmongodump工具需要--query参数的有效JSON对象。来自https://docs.mongodb.com/manual/reference/program/mongodump/#cmdoption--query

  

- 查询,-q

     

提供JSON文档作为查询,可选择限制mongodump输出中包含的文档。

     

您必须将查询括在单引号中(例如'),以确保它不会与您的shell环境进行交互。

由于您传递给mongoexport的查询参数,该命令失败,由于存在new Date()这是一个Javascript语句而不是有效的JSON对象。

所需的修改只是使用您提供的示例ISODate()对象,.e.g:

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()的内容替换为您需要的日期。

答案 2 :(得分:0)

你应该在mongoexport上使用$ date:

li

答案 3 :(得分:0)

删除\$lte并在查询中将其更改为引用"$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)