gpt4 book ai didi

javascript - 从 Node 批量插入 mongoDB

转载 作者:行者123 更新时间:2023-11-28 05:12:14 24 4
gpt4 key购买 nike

我在 Windows 计算机中有一个目录,其中包含 350 万个 json 文件,大小从 3kb 到 30kb 不等。我有一些功能:

myBuilder(json){
//some stuff producing an object named entry
return entry
}

我想做的就是读取目录中的每个文件,通过 myBuilder 运行它们并将它们全部插入 mongo 数据库中。我在下面发布了我的最佳尝试。

达到预期结果的最简单方法是什么?

注释:

  1. 我认为 insertMany 可能很复杂,因为我需要构建一种方法来将此操作分成多个 block ,因为保存条目的单个数组将超出我的可用内存。
  2. 我似乎无法让 glob 正常工作。这可能是基于 Windows 的限制吗?这可能是基于内存的限制吗?不管怎样,现在我想避免使用 glob 来回答。
  3. 我非常感谢有人解释在连接到数据库的单个实例中运行多个连续的 insertOne 操作是否更有意义,或者是否有必要每次都连接和断开连接。

示例代码:

var fs = require('fs');
var mongodb = require('mongodb');
var MongoClient = mongodb.MongoClient;
var MongoURL = 'mongodb://localhost:27017/my_database_name';
traverseFileSystem('/nodejs/nodetest1/imports');

function traverseFileSystem(path){
var files = fs.readdirSync(currentPath);
for (var i in files) {
var currentFile = path + '/' + files[i];
var stats = fs.statSync(currentFile);
if (stats.isFile()){
var fileText = fs.readFileSync(currentFile,'utf8');
var json= JSON.parse(fileText);
var entry = myBuilder(json); // note this is described above
insertToMongo(entry);
}
}
}
function insertToMongo(entry){
console.log(entry);
MongoClient.connect(MongoURL, function (err, db) {
var collection = db.collection('users');
collection.insert(entry, function (err, result) {
if(err)
console.log("error was"+err);
else
console.log("entry was"+result);
db.close();
});
});
}

这将为目录中的每个文件传递(并记录到控制台)格式良好的条目。但它不会显示任何条目的正错误或结果。 Mongo 确实显示已建立连接并且没有显示任何错误。

最佳答案

您可能希望对所有插入重用数据库连接。连接过程消耗一定量的毫秒。您可以保存,特别是当您有大量文件要导入时。

关于一次插入一个或多个文档,可以使用 bulk operations 。即通过使用循环,例如:读取 10 个文件,“批量”它们并执行。也使用相同的数据库连接。

<小时/>

如果您可以考虑 mongoimport:

您可以从终端使用 mongoimport import all .json files within a directory :

@echo off
for %%f in (*.json) do (
"mongoimport.exe" --jsonArray --db databasename --collection collectioname --file %%~nf.json
)

关于javascript - 从 Node 批量插入 mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41265298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com