2016-09-16 40 views
0

試圖運行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")}

要,我可以在蒙戈客戶端查詢就好了。

結果在以下錯誤:

Assertion: 10340:Failure parsing JSON string near: "created_a

+0

我不覺得你可以指定'mongoexport'命令日期。我已經解決了:打開shell命令,使用日期參數查詢並將其保存到collection2中。然後導出collection2 – Valijon

回答

2

您的查詢\。請刪除它。

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

它使用Unix時間戳嗎? – lozadaOmr

+0

@lozadaOmr:這是Epoch格式的日期。 – 4J41

0

mongoexportmongodump工具需要對--query參數一個有效的JSON對象。從https://docs.mongodb.com/manual/reference/program/mongodump/#cmdoption--query

--query , -q

Provides a JSON document as a query that optionally limits the documents included in the output of mongodump.

You must enclose the query in single quotes (e.g. ') to ensure that it does not interact with your shell environment.

命令失敗,原因是你傳遞到mongoexport查詢參數,這不是有效的JSON對象因new Date()存在這是一個JavaScript語句。

所需的修改是簡單地使用你提供的例子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()與您所需要的日期的內容。

+0

使用這個'--query'{「created_at」:{$ lte:ISODate(「2015-11-31T23:59:59.599Z」}}''得到了'Sun Sep 18 16:27:43 Assertion:10340:解析附近的JSON字符串失敗:「created_a」 – lozadaOmr

+0

什麼是您的MongoDB版本?您可以嘗試運行'mongoexport --version'嗎?我在MongoDB 3.2.9中使用了這個命令,它的工作原理如下:'mongoexport -d test -c test --query'{created_at:{$ lte:ISODate(「2016-09-19T00:00:00Z」)}}'' –

+0

使用2.0.4版 – lozadaOmr

0

您應該使用$最新與mongoexport:

mongoexport.exe -h *HOST* -p *PORT* -q "{ 'created_at' : { '$lt' : { '$date' : '2014-03-07T06:32:19.172Z' } } }" 
+0

沒有錯誤發生,但沒有記錄也被輸出。 – lozadaOmr

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部分:

[email protected]:~$ 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)