No me parece que usar python para combinar todos los archivos json sea conveniente, y el archivo combinado sería 30G.
Estoy usando mongoDB y nodejs. La forma en que relleno un json de muestra es:
var data = require('./data1.json') var populateDB = function() { db.collection('temp', function(err, collection) { collection.insert(data, {safe:true}, function(err, result) {}); }); };Esto solo agrega un archivo json. ¿Cómo debo llenar la colección con los más de 10000 archivos json desde aquí? ¡Cualquier sugerencia es muy apreciada!
La forma más fácil sería escribir un programa Node que procese un archivo JSON y luego ejecutarlo varias veces desde el shell:
for i in *.json; do node program.js $i; done Su programa Node solo necesitaría acceder al nombre desde process.argv en lugar de tenerlo codificado, pero la lógica sería la misma.
Si desea hacer todo en el nodo, deberá leer el directorio, obtener todos los archivos .json , leer cada uno de ellos en secuencia y luego ejecutar un código similar al que publicó. Si se trata de una tarea única, incluso puede salirse con la suya usando las funciones "Sincronizar" para simplificar su código si se trata de una tarea secuencial para hacer una cosa a la vez y no le importa agregar los datos en paralelo.
Algo así funcionaría
npm i glob-fs mongodb async --save
const async = require('async'); const fs = require('fs'); const glob = require('glob-fs')({ gitignore: true }); const MongoClient = require('mongodb').MongoClient; const files = './files/data*.json'; const collection = 'test'; const url = 'mongodb://localhost:27017/test'; // Connect to db MongoClient.connect(url, function (err, db) { if (err) { console.log(err); } // Get the collection const col = db.collection(collection); glob.readdirPromise(files) .then(function (f) { return async.eachSeries(f, (item, callback) => { fs.readFile(item, 'utf8', function (err, data) { if (err) { return console.log(err); } // Insert into mongo col.insertMany(JSON.parse(data)).then((r) => { console.log(r); return callback(r); }).catch(function (fail) { console.log(fail) }); }); }, err => { console.log(err); }); }) .then(err => { if (err) { db.close(); } }) .catch(err => { console.log(err); }); });