Model.create和Model.collection.insert都不能完全保存对象

时间:2015-12-14 16:57:48

标签: node.js csv mongoose

我有一个Node JS项目,Mongoose连接到MongoDB集合。

我希望用户能够上传此集合的csv导出,并使其内容成为MongoDB的内容。我使用mongoose-csv进行导出。

编辑:我使用fast-csv进行csv解析

这是一个片段:

//import a csv file into the database
app.post('/importdatabase', function (req, res) {


    req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {

        csv.fromStream(file, { headers : true }).on("data", function (data) {

            //Clear Database
            License.remove({}, function (err) {

                //Check for errors
                if (err) {
                    res.send(err);
                }

            });

            //Insert uploaded database

            console.log(data);

            License.collection.insert(data);

        }).on("end", function () {
            console.log("done");

            //Send user back to main page
            res.writeHead(301, {
                'Location': '/',
                'Content-Type': 'text/plain'
            });
            res.end();
        });

    });


    req.pipe(req.busboy);

});

我正在测试4个文档的集合。当我使用License.collection.insert方法时,它只将最后一项保存到集合中。当我使用License.create方法时,它只保存最后3项。

当我记录传入的“数据”时,它会显示所有4个项目。我该怎么做才能进一步调试呢?

1 个答案:

答案 0 :(得分:0)

我认为你需要将insert放在remove回调中:

csv.fromStream(file, {
    headers: true
}).on("data", function(data) {

    //Clear Database
    License.remove({}, function(err) {

        //Check for errors
        if(err) {
            res.send(err);
        }
        //Insert uploaded database

        console.log(data);

        License.collection.insert(data);
    });

}).on("end", function() {
    console.log("done");

    //Send user back to main page
    res.writeHead(301, {
        'Location': '/',
        'Content-Type': 'text/plain'
    });
    res.end();
});