gpt4 book ai didi

javascript - Node 加载例程完成后,来自 mongodb 集合的文档 "disappearing"

转载 作者:行者123 更新时间:2023-12-03 09:57:21 26 4
gpt4 key购买 nike

作为 mongodb 和 Node 的新手,这个特殊问题让我发疯:

我编写了一个小模块,它读取 .csv 文件,将其转换为 JSON 数组,然后将其循环加载到 mongodb 集合中,一次一条记录。当我在调试中运行它时,并在“var v = i;”处设置断点行,我可以查询 mongo 集合,并看到一个又一个完全填充的记录出现。

但是,一旦循环结束 - 所有记录的数据都消失了!实际的记录仍然都在那里,但都是空的。我刚刚在每条记录中看到的数据不再在这些记录中。

这可能是一些有线范围问题,但是,作为新手,我只是不知道那是什么。

这是我的代码:

exports.excelFileParser = function(fileName, tabName, metadataFields){
var assert = require('assert');
console.log(metadataFields);
if(typeof require !== 'undefined') XLSX = require('xlsx');

var mongodb = require('mongodb');
var _ = require('underscore');

var fs = require('fs');

var Converter=require("csvtojson").core.Converter;

var distinctDataFields;

var MongoClient = mongodb.MongoClient;

var url = 'mongodb://localhost:27017/datamanager-03-test';

var fileName = 'clean_file.csv';

//fs.writeFileSync(fileName, newCsvLines);

var csvFileName=fileName;
var fileStream=fs.createReadStream(csvFileName);
//new converter instance
var csvConverter=new Converter({constructResult:true});

//end_parsed will be emitted once parsing finished
csvConverter.on("end_parsed",function(jsonObj){
//console.log(jsonObj); //here is your result json object
makeRecords(jsonObj);

});

function makeRecords(result){
console.log(result.length);

MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
console.log('Connection established to', url);

var collectionName = 'DC_Facilities';

db.open(function(err, client){
client.createCollection(collectionName, function(err, col) {
});

var collection = db.collection(collectionName);

for(var i =0;i < result.length; i++){

var dataRecord = result[i];

collection.insert(dataRecord);

var v = i;
}
console.log("finished");
db.close();
});
}
});
}

fileStream.pipe(csvConverter);
};

最佳答案

collection.insert 是一个异步函数,因此您要在其中任何函数完成之前调用db.close()。您也不需要调用 createCollection,因为如果集合尚不存在,系统会为您创建该集合。

因此,您的代码应该如下所示,以便在所有 insert 操作完成之前不会调用 db.close():

db.open(function(err, client){
var collection = db.collection(collectionName);
var inserted = 0;
for(var i = 0; i < result.length; i++){
var dataRecord = result[i];
collection.insert(dataRecord, function(err) {
if (++inserted == result.length) {
console.log("finished");
db.close();
}
});
}
});

关于javascript - Node 加载例程完成后,来自 mongodb 集合的文档 "disappearing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com