2013-02-07 109 views
16

我嘗試使用下面的mongoexport調用get從我的MongoDB的某一天進行訂單:Mongoexport

mongoexport --db store --collection user_data --query "{'order.created_order':{$gt:ISODate("2013-02-05T00:00:00.000Z"),$lt:ISODate("2013-02-06T00:00:00.000Z")}, 'order.status':'paid'}" --out ordersfeb6.json

,但我目前經歷以下錯誤:

Thu Feb 7 18:33:43 Assertion: 10340:Failure parsing JSON string near: 'order.cre 
0x56a223 0x5712e5 0x53e0f7 0x53e21e 0x8b7739 0x524f2b 0x5258a3 0x7fa7b77bd76d 0x525975 
mongoexport(_ZN5mongo15printStackTraceERSo+0x23) [0x56a223] 
mongoexport(_ZN5mongo11msgassertedEiPKc+0xc5) [0x5712e5] 
mongoexport(_ZN5mongo8fromjsonEPKcPi+0x377) [0x53e0f7] 
mongoexport(_ZN5mongo8fromjsonERKSs+0xe) [0x53e21e] 
mongoexport(_ZN6Export3runEv+0x489) [0x8b7739] 
mongoexport(_ZN5mongo4Tool4mainEiPPc+0x72b) [0x524f2b] 
mongoexport(main+0x23) [0x5258a3] 
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7fa7b77bd76d] 
mongoexport() [0x525975] 
assertion: 10340 Failure parsing JSON string near: 'order.cre 

從這個問題mongoexport JSON parsing error我知道,JavaScript是用來評估蒙戈查詢的某些部分。我想知道:$ gt和$ lt操作符需要javascript,是我的問題嗎?如果沒有,我不確定我的查詢有什麼問題,並且我們將不勝感激。感謝您的閱讀!

回答

51

這裏的問題是你如何表示日期,他們需要以Date類型和時代格式傳入。試試這個:

mongoexport --db store --collection user_data --query '{"order.created_order":{$gt:new Date(1360040400000),$lt:new Date(1360990800000)}, "order.status" : "paid"}' --out ordersfeb6.json 

如果您正在尋找ISODate轉換爲時代,只需調用日期的外殼,這樣的事情:

> new Date(2013,01,16)*1 
1360990800000 

然後驗證:

> new Date(1360990800000) 
ISODate("2013-02-16T05:00:00Z") 

更新:如在imcaptor的評論中指出的,本月基於0(0 = 1月,11 = 12月)在Date中ctor,而不是最期望的東西,並且容易忘記。我在上面的例子中通過了01,並得到了2月的日期,正如你在ISODate中可以看到的那樣。

+0

非常感謝您的幫助!這非常有用。 – Leah

+1

@Adam。感謝你的回答。將問題的標題更改爲與日期相符的問題(正如您的答案已明確),而不是$ lt $ gt操作符是否合適?如果是這樣的話,我會更快地找到你的答案。 –

+0

可能是一個好主意,如果你認爲它會使它更容易搜索,也許只是增加$ lt和$ gt是針對此問題中的日期範圍這一事實 –