gpt4 book ai didi

mongodb - 遍历 node.js 中的数据库记录

转载 作者:可可西里 更新时间:2023-11-01 09:53:26 25 4
gpt4 key购买 nike

我正在学习 node.js 和 mongodb,它们看起来适合我想制作的东西。作为一个帮助我学习的小项目,我想我应该将我拥有的 phpbb3 论坛中的“posts”表复制到 mongodb 表中,所以我做了这样的事情,其中​​ db 是 mongodb 数据库连接,客户端是 mysql 数据库连接。

db.collection('posts', function (err, data) {
client.query('select * from phpbb_posts", function(err, rs) {
data.insert(rs);
});

当我在小表上执行时,这工作正常,但我的帖子表中有大约 100000 行,即使我让它运行一个小时,这个查询也不会返回。我怀疑它试图将整个数据库表加载到内存中,然后将其插入。

所以我想做的是一次读取一大块行并将它们插入。但是我看不到如何读取 node.js 中的行的子集,甚至更多的问题是,我无法理解如何在我只通过回调获得通知时一次一个地遍历查询它完成了。

有什么想法可以最好地做到这一点吗? (我正在寻找使用 node.js 的解决方案,因为我想知道如何解决此类问题,毫无疑问,我可以通过其他方式轻松解决)

最佳答案

您可以尝试使用 asnyc library草兰。该库实现了一些异步流程控制方法来处理 node.js 中面向回调的编程风格的注意事项。

对于您的情况,使用 whilst 方法可以解决问题,对 mysql 使用 LIMIT 查询并将它们插入到 mongodb 中。

示例(未测试,因为我没有可用的测试数据,但我想你会明白的)

var insertCount = 0;
var offset = 0;

// set this to the overall recordcound from mysql
var recordCount = 0;

async.whilst(
// test condition callback
function () { return insertCount < recordCount; },

// actual worker callback
function (callback) {
db.collection('posts', function (err, data) {
client.query('select * from phpbb_posts LIMIT ' + insertCount + ',1000', function(err, rs) {
data.insert(rs);

// increment by actually fetched recordcount (res.length?)
insertCount += res.length;

// trigger flow callback
callback();
});
});
},

// finished callback
function (err) {
// finished inserting data, maybe check record count in mongodb here
}
});

正如我已经提到的,这段代码只是改编自异步库自述文件的示例。但也许它是将如此数量的数据库记录从 mysql 添加到 mongo 的一种选择。

关于mongodb - 遍历 node.js 中的数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5186931/

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