sql >> データベース >  >> NoSQL >> MongoDB

Node.jsを使用してmongodbに大量のデータを入力することはできません

    ロビーが言ったように、ストリームはこれを実現する方法です。 fs.createReadStream() .readFileSync()の代わりに使用する必要があります 。まず、パスと、分割する文字列/正規表現を取得するラインリーダーを作成します。

    linereader.js

    var fs = require("fs");
    var util = require("util");
    var EventEmitter = require("events").EventEmitter;
    
    function LineReader(path, splitOn) {
    
        var readStream = fs.createReadStream(path);
        var self = this;
        var lineNum = 0;
        var buff = ""
        var chunk;
    
        readStream.on("readable", function() {
    
            while( (chunk = readStream.read(100)) !== null) {
                buff += chunk.toString();
                var lines = buff.split(splitOn);
    
                for (var i = 0; i < lines.length - 1; i++) {
                    self.emit("line",lines[i]);
                    lineNum += 1;
                }
                buff = lines[lines.length - 1];
            }
        });
        readStream.on("close", function() {
            self.emit("line", buff);
            self.emit("close")
        });
        readStream.on("error", function(err) {
            self.emit("error", err);
        })
    }
    util.inherits(LineReader, EventEmitter);
    module.exports = LineReader;
    

    これにより、テキストファイルが読み取られ、読み取られた行ごとに「行」イベントが発行されるため、一度にすべてのイベントがメモリに保存されることはありません。次に、非同期パッケージ(または使用する非同期ループ)を使用して、各ドキュメントを挿入するファイルをループします。

    app.js

    var LineReader = require("./linereader.js");
    var async = require("async");
    
    var paths = ["./text1.txt", "./text2.txt", "./path1/text3.txt"];
    var reader;
    
    async.eachSeries(paths, function(path, callback) {
    
        reader = new LineReader(path, /\n/g);
    
        reader.on("line", function(line) {
            var doc = turnTextIntoObject(line);
            db.collection("mycollection").insert(doc);
        })
        reader.on("close", callback);
        reader.on("error", callback);
    }, function(err) {
        // handle error and finish;
    })
    


    1. Redisスキャンコマンドの一致オプションはPythonでは機能しません

    2. マングースfindByIdAndUpdateが正しいモデルを返さない

    3. マングースで列挙型を作成して使用する方法

    4. SpringDataMongoDBを使用したアプリケーション起動時の初期データのロード