3

尝试运行 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

4 回答 4

2

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

--query '{"created_at": {$lte: new Date(1451577599000)}}'
于 2016-09-16T06:26:01.960 回答
2

您应该将 $date 与 mongoexport 一起使用:

mongoexport.exe -h *HOST* -p *PORT* -q "{ 'created_at' : { '$lt' : { '$date' : '2014-03-07T06:32:19.172Z' } } }"
于 2016-09-16T08:13:03.580 回答
1

删除\$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)
于 2016-09-16T08:54:53.417 回答
0

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

--查询,-q

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

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

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

所需的修改是简单地使用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()您需要的日期即可。

于 2016-09-16T07:42:26.940 回答