簡體   English   中英

異步節點,貓鼬插入數據

[英]Asynchronous Node, Mongoose Inserting in Data

我有一個要讀取的CSV文件,其中包含數百行。 基於CSV文件中的一行,我正在創建一個“項目”並將其存儲到我的項目集合中。 每個項目也都有一個類別,這是它自己的模型。 如此多的項目可以具有相同的類別。 這兩個集合一開始都沒有,我需要根據CSV文件填充這兩個集合。 我遇到的問題是,由於很多行都包含相同的類別,通常是一個接一個地接一個地創建,因為所有事情都是異步發生的,所以會創建相同類型的多個類別文檔。 我有這樣的代碼:

    exports.upload = function(req, res) {
var reader = csv.createCsvFileReader("test.csv", {columnsFromHeader:true, nestedQuotes:true});
reader.addListener('data', function(data) {        
    projectService.findCategory(data.Category, function(id){
        var Project = mongoose.model('Project');
        var project = new Project();
        project.name = data.Name;
        project.narrative = data.Narrative;
        project.address = data.address;
        project.category = id;
        project.lat = data.Lat;
        project.lng = data.Lng;
        project.save(function(err){
            console.log(project);
            if(err){
                console.log("There was an error in saving your project");
                console.log(err);
                return;
            }
        });
    });
});

}

    exports.findCategory = function(projectCategory, callback) {
var Category = mongoose.model('Category');
Category.findOne({ name: projectCategory }, function(err, categoryReturned){
    if (err) {
        console.log("Could not return a category");
        console.log(err);
        return;
    }
    if(categoryReturned == null){ //If category does not exist create a new category. 
        category = new Category({name : projectCategory});
        console.log(category);
        category.save(function(err, categoryCreated){
            console.log('New Category Created');
            callback(categoryCreated._id);
        });
    }else{
        callback(categoryReturned._id);
    }
});

}

這是一些示例輸入:

    "Name","Narrative","Address","Category","Lat","Lng","Year_Completed","Sponsors"
    "Raymond Avenue Neighborhood Garden Construction","","","3",34.0317141377768,-118.297777175903,"2010","??? (City of Los Angeles, The Garden Council)"
    "El Cariso Smart Garden Construction","","","3",34.3169450092985,-118.419291973114,"2010","L.A. County Parks and Recreation"
    "Central Basin Friendly Native Plants Garden","","","2",33.9955722580013,-118.144440650939,"2010","Central Basin Municipal Water District"

這將創建兩個“ 3”類別條目。 我知道為什么。 我不知道如何解決它。

var dataArray = new Array(YOUR DATA);
var index = 0;
(function(data) {
    var presentFunction = argument.callee;
    projectService.findCategory(data.Category, function(id){
        var Project = mongoose.model('Project');
        var project = new Project();
        project.name = data.Name;
        project.narrative = data.Narrative;
        project.address = data.address;
        project.category = id;
        project.lat = data.Lat;
        project.lng = data.Lng;
        project.save(function(err){
           console.log(project);
           if(err){
               console.log("There was an error in saving your project");
            console.log(err);
            return;
           }
           if (index > dataArray.length - 1) {
               return;
           } else {
               index++;
               presentFunction(dataArray[index]);
           }
        });
    });
})(dataArray[index]);

這應該做到。 解決方案是粗略的,有很多改進的余地,但是您知道了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM