MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Не може да се попълни голяма част от данни в mongodb с помощта на Node.js

Както каза Роби, потоците са начинът да вървим с това. 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
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да представим масив със смесени типове

  2. Пресичане на индекси срещу съставен индекс?

  3. изпълните само една от многото дублирани задачи със sidekiq?

  4. Скоти използва MongoDB

  5. node.js mongodb javascript объркване на обхвата