2015-02-24 192 views
1

假設我有一個JavaScript數組companyBills並且它裏面有我以這種方式存儲的對象m;與m > 100.000元素。通過Mongoose在MongoDB中存儲巨大的JSON數據數組

{key_0:value_0, key_1:value_0_1, key_n:value_0_n}, 
{key_0:value_1, key_1:value_1_1, key_n:value_1_n}, 
{key_0:value_m, key_1:value_m_1, key_n:value_m_n} 

現在我想通過貓鼬,存儲這在MongoDB中以這樣的方式:

CompanyBills.create (companyBills, function(err, jellybean, snickers) { 
     if(!err) {   
      console.log('Success'); 
     } else { 
      console.log('Error'); 
     } 

但是數組companyBills過於龐大。因此,我想以大塊1/100米存儲。如何分割數組companyBills節省時間並存儲在MongoDB中?

我正在創建與https://github.com/SheetJS/js-xlsx陣列,也許有機會提前掛鉤。

+1

你可以張貼數組創建的代碼?如果您不介意插入數據的順序,您可以將數組分成塊,並使用'async'庫將每個塊並行放入數據庫中 – 2015-02-24 15:33:20

+1

確實有一種解決方案適用於此特定場景:https://github.com/SheetJS/js-xlsx/issues/138但是我會對並行訪問的異步庫非常感興趣。 – nottinhill 2015-02-24 15:47:38

回答

2

您是否嘗試了批量插入方法?

CompanyBills.collection.insert([huge array], function (err, results) { 
    Console.log(results) 
}) 

http://docs.mongodb.org/manual/tutorial/insert-documents/

+0

看起來就像是cuprit,目前在Mongoose中沒有批量寫入方法;請參閱https://github.com/LearnBoost/mongoose/issues/2366,所以我使用的'create'方法非常慢,只能自行插入每個元素。因此我必須使用底層的MongoDB驅動程序。 – nottinhill 2015-02-24 17:29:19

+0

通過使用CompanyBill.collection.insert()可以直接訪問驅動程序。編輯上面 – sctskw 2015-02-24 17:43:21

+0

確認這將*是一個解決方案,如果不是一個新的錯誤渲染本地驅動程序批量插入選項無用 - http://stackoverflow.com/questions/24466366/mongoose-rangeerror-maximum-call-stack-size -exceeded也許你可以確認嗎? – nottinhill 2015-02-25 10:32:27