私は3から30kbの範囲の350万のjsonファイルを持つWindowsマシンに1つのディレクトリを持っています。私はいくつかの機能を持っている:ノードからmongoDBへの一括挿入
myBuilder(json){
//some stuff producing an object named entry
return entry
}
私がやりたいことのすべては、ディレクトリ内のすべてのファイルを読み込まれ、myBuilderを介してそれらを実行し、モンゴデータベースにそれらのすべてを挿入します。私は下に私の最高の試みを掲載しました。
希望の結果を得る最も簡単な方法は何ですか?
注:
- 私はエントリを保持する単一のアレイは、私の使用可能なRAMを超えてしまうようチャンクにこの操作を破る方法を構築する必要があるためinsertManyが複雑になり得ると考えています。
- グロブが動作しないようです。 Windowsベースの制限ですか?それはメモリベースの制限ですか?いずれにせよ、私はglobを使って答えを避けたいと思います。
- データベースに接続する単一インスタンス内で多くの連続したinsertOne操作を実行する方が好都合かどうか、または毎回接続と切断を行う必要があるかどうかを説明する人には本当に感謝しています。
サンプルコード:
var fs = require('fs');
var mongodb = require('mongodb');
var MongoClient = mongodb.MongoClient;
var MongoURL = 'mongodb://localhost:27017/my_database_name';
traverseFileSystem('/nodejs/nodetest1/imports');
function traverseFileSystem(path){
var files = fs.readdirSync(currentPath);
for (var i in files) {
var currentFile = path + '/' + files[i];
var stats = fs.statSync(currentFile);
if (stats.isFile()){
var fileText = fs.readFileSync(currentFile,'utf8');
var json= JSON.parse(fileText);
var entry = myBuilder(json); // note this is described above
insertToMongo(entry);
}
}
}
function insertToMongo(entry){
console.log(entry);
MongoClient.connect(MongoURL, function (err, db) {
var collection = db.collection('users');
collection.insert(entry, function (err, result) {
if(err)
console.log("error was"+err);
else
console.log("entry was"+result);
db.close();
});
});
}
これが通る(およびコンソールへのログは)良く、ディレクトリ内のすべてのファイルのエントリがフォーマットされています。しかし、それは肯定的なエラーや結果を結果として表示しません。 Mongoは接続が行われたことを示し、エラーを表示しません。
それを一つずつ挿入する実際の問題は何ですか? –
私は、一連のinsertOne操作で問題なく動作します。私の問題は、これを実際に動かすようには思えないということです。注3の答えと何か関係がありますか? – COMisHARD
["動作しません"は問題ありません] –