MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Nie można zapełnić dużej części danych do mongodb za pomocą Node.js

Jak powiedział Robbie, najlepszym rozwiązaniem są strumienie. fs.createReadStream() powinno być używane zamiast .readFileSync() . Zacząłbym od stworzenia czytnika wierszy, który pobiera ścieżkę i dowolny ciąg/wyrażenie regularne, na które chcesz podzielić:

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;

Spowoduje to odczytanie pliku tekstowego i wyemitowanie zdarzeń „line” dla każdej odczytanej linii, więc nie będziesz mieć ich wszystkich w pamięci naraz. Następnie, używając pakietu asynchronicznego (lub dowolnej pętli asynchronicznej, której chcesz użyć), przejdź przez pliki wstawiając każdy dokument:

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. Wypełnij obiekt w tablicy

  2. Wydajność struktury kolekcji MongoDB

  3. mongodb mongoTemplate otrzymuje odrębne pole z pewnymi kryteriami

  4. Schemat Mongoose nie został zarejestrowany dla modelu

  5. serwer zwrócił błąd na etapie uwierzytelniania SASL:Uwierzytelnianie nie powiodło się