最近在写一个号码中间四位查询的网站,涉及到大量数据的写入,其中遇到mongoDB大量写入数据时卡死内存溢出的问题,最终的解决方案记录写一下。
最终方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| const { MongoClient } = require('mongodb');
const uri = 'mongodb://localhost:27017/';
const dbName = 'your_database'; const collectionName = 'your_collection';
const dataToInsert = [ { name: 'John', age: 30 }, { name: 'Alice', age: 25 }, ];
MongoClient.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => { if (err) { console.error('Failed to connect to MongoDB:', err); return; }
console.log('Connected to MongoDB');
const db = client.db(dbName); const collection = db.collection(collectionName);
const requests = dataToInsert.map(data => ({ insertOne: { document: data } }));
collection.bulkWrite(requests, (err, result) => { if (err) { console.error('Failed to insert documents:', err); return; }
console.log(`Inserted ${result.insertedCount} documents`); client.close(); }); });
|
在这个示例中,确保你已经安装了mongodb Node.js模块。然后,替换'mongodb://localhost:27017/'为你MongoDB数据库的连接URI,'your_database'为你要写入的数据库名称,'your_collection'为你要写入的集合名称。然后,准备好要插入的数据列表dataToInsert,每个对象代表一个文档。连接到数据库后,创建批量写入的请求数组requests,每个请求都是一个包含insertOne操作的对象,该操作指定要插入的文档。最后,通过collection.bulkWrite()执行批量写入操作,并在回调函数中处理结果。
这个方法写入,40多万的数据基本在1分内就完成!