2014-02-20 107 views
2

Im與mongo和節點的新的。我試圖將一個csv上傳到MongoDB中。MongoDb批量插入限制問題

步驟包括:

  1. 讀CSV。
  2. 將其轉換爲JSON。
  3. 把它推到MongoDB上。

我用 'csvtojson' 模塊爲csv轉換爲JSON和使用代碼推它:

MongoClient.connect('mongodb://127.0.0.1/test', function (err, db) { //connect to mongodb 
    var collection = db.collection('qr'); 
    collection.insert(jsonObj.csvRows, function (err, result) { 
     console.log(JSON.stringify(result)); 
     console.log(JSON.stringify(err)); 
    }); 
    console.log("successfully connected to the database"); 
    //db.close(); 
}); 

此代碼工作正常使用csv高達大小4MB;更多的是它不工作。

我試圖安慰錯誤

console.log(JSON.stringify(err)); 

它返回{}

注:我的是32位系統。

是否因爲32位系統的文件限制爲4mb?

我在一個場景中,我不能限制csv文件中的大小和no.of屬性(即代碼將處理各種csv文件)。那麼如何處理呢?我有沒有可用的模塊?

+0

我覺得'collection.insert'方法需要回調是3TH參數,是你的console.log甚至被執行? – GiveMeAllYourCats

+0

@MDG正在執行。如果插入它,我會得到結果。在不插入的情況下產生'undefined'結果 – Okky

+0

啊,當你超過4MB時會發生這種情況。我懂了。 – GiveMeAllYourCats

回答

2

如果您在將csv解析爲JSON時沒有問題,那麼您可能只是將列表大小限制爲傳遞給insert

正如我可以看到.csvRows元件是一個數組,所以而不是一次發送的元件的所有,切它向上和批次在呼叫中插入的元素。元素的數量似乎可能是問題的原因,而不是規模。將陣列拆分成幾個插頁而不是1應該有幫助。

試驗500,然後1000等等,直到你找到一個幸福的媒介。

排序編碼它的:

var batchSize = 500; 
for (var i=0; i<jsonObj.csvRows.length; i += batchSize) { 
    var docs = jsonObj.csvRows.slice(i, i+(batchSize -1)); 
    db.collection.insert(docs, function(err, result) { 
     // Also don't JSON covert a *string* 
     console.log(err); 

     // Whatever 
    } 
} 

而且在chunks這樣做。

+0

這可能是可能的;但我試圖找到一個大小,我可以在一個插入插入最大數量的行。問題是csv中no的屬性也有所不同,因此no的屬性增加每個大小的行數可能會減少。 – Okky

+0

@SreekeshOkky不知道你讓我。答案中的一小部分代碼塊可以清除該問題。 –

+1

更好的做法是爲此使用流:https://gist.github.com/PaulMougel/8111810 – GiveMeAllYourCats

0

可以使這些數據元素的數組,然後簡單地使用MongoDB的插入功能,通過這個數組插入功能