我有大約一百萬個JSON文件保存在目錄「D:/ njs/nodetest1/imports/source1 /」的許多子目錄中,我想將它們導入到我的mongoDB數據庫的集合「users」中。如何從JSON文件目錄向mongoDB添加多條記錄?
以下代碼正確遍歷文件系統。正如你所看到的,它讀取目錄中的每個項目,如果該項目是一個目錄,它將讀取其中的每個項目。對於不是目錄的每個項目,在發送包含函數的變量之前,它會對其執行一些操作。
function traverseFS (path){
var files = fs.readdirSync(path);
for (var i in files){
var currentFile = path + '/' + files[i];
var stats = fs.statSync(currentFile);
if (stats.isFile())
runOnFile(currentFile);
else
traverseFS(currentFile);
}
}
traverseFS("D:/njs/nodetest1/imports/source1/")
接下來,我對代碼運行了一些操作(見下文)。它讀取文件,將其解析爲JSON對象,將該對象的兩個屬性讀入變量,在變量「entry」中創建一個對象並將該變量傳遞給另一個函數。
function runOnFile(currentFile){
var fileText = fs.readFileSync(currentFile,'utf8');
var generatedJSON = JSON.parse(fileText);
var recordID = generatedJSON.recordID;
var recordText = generatedJSON.recordTexts;
var entry = {recordID:recordID, recordText:recordText};
insertRecord(entry);
}
然後將最終的功能應當用於將數據插入到MongoDB中。我認爲這是事情出錯的地方。
function insertRecord(entry){
var MongoClient = mongodb.MongoClient;
var MongoURL = 'mongodb://localhost:27017/my_database_name';
MongoClient.connect(MongoURL, function (err, db) {
var collection = db.collection('users');
collection.insert([entry], function (err, result) {
db.close();
});
});
}
我想到這在文件結構中運行,讀取JSON文件爲對象,然後將這些對象到MongoDB的我。相反,它會將第一個文件讀入數據庫,然後停止/掛起。
注:
- 我不想使用mongoimport,因爲我不希望插入從這些文件中的所有數據到我的MongoDB數據庫。然而,我並不拘泥於這種方法的任何方面。如果存在其他解決方案,我願意接受。
- 這連接到數據庫就好了。對於目錄中的每個項目,這將成功創建一個「入口」對象並將其傳遞給insertRecord函數。換句話說,問題必須發生在insertRecord部分。但顯然這可能是由過程中的某些事件引起的。
- 如果我添加錯誤處理,沒有錯誤產生。我已經將錯誤處理留在了這篇文章之外,因爲它混淆了代碼片段的可讀性。
不清楚您的runOnJson()函數是應該做的 - 啜食JSON內容和東西到蒙戈? –
不完全是我問的。我問什麼應該具體*函數* runOnJson()做什麼?如果它需要做的就是在文件上運行mongoimport(例如從示例中),那麼你是否嘗試過? –