2012-12-13 45 views
0

我有幾個GB從RDBMS導出爲JSON。所有日期均以嚴格的JSON格式進行格式化,即{$date:1354810746067}

Mongoimport似乎並未將其轉換爲所需的ISODate。它只適用於格式爲Date(1354810746067)

是否有一個選項來調整mongoimport以接受{$ date:..}作爲ISODate?

或者我應該通過一些sed腳本通過我的導入,也許?

樣品輸入會像

{cleared:true,category:"general auditing",transactionId:null,details:{new_terminal_mode:"test value-24",company_old_id:2534,new_terminal_state:"test value-28",reduction_type:"test value-3",transition_times:[{$date:1355408317000},{$date:1355407983000},{$date:1355413490000},{$date:1355411339000},{$date:1355414485000},{$date:1355414378000},{$date:1355408061000},{$date:1355408064000}]},_id:"69",dateTime:{$date:1354813457327},severity:20,eventType:"log_event_count_threshold_reached",systemId:693972591865925,carParkId:0} 

我試着用

cat file | sed -e s/{$date:\([0-9]*\)}/Date\(\1\)/g | mongoimport -c test 

但我的正則表達式的技能在那裏失敗了:-(。

+0

以哪種方式,你在你以前的RDBMS日期。是Unix時間,但不是UNIX時間大約10個字符。 –

+0

這是從時代開始的毫秒,它符合MongoDB日期的要求http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON。 Unix時間是自紀元以來的秒數,所以你需要爲MongoDB乘以x1000。 – greyfairer

回答

1

我現在不mongoimport這樣我就可以」 t幫助你在這裏。

但是對於sed,嘗試在你的sed中使用一些引號:

sed -e 's/{$date:\([0-9]*\)}/Date\(\1\)/g' file 

PS:你的正則表達式很好。

+0

我的正則表達式使用notepad ++,但不是在sed中。但的確,我只是錯過了這個詞條...... – greyfairer

0

嘗試用引號,另一個是不是一個有效的JSON:{「$日期」:1354810746067}