gpt4 book ai didi

javascript - 如何优化循环以插入数据库?

转载 作者:行者123 更新时间:2023-11-29 02:57:12 26 4
gpt4 key购买 nike

您好,我目前正在尝试将从 XML 文件中获取的数据插入到我的 MySql 数据库中。我正在使用 Sails.js 和水线进行查询。我的表是 Users 和 Pets,一个用户可以有多个宠物,一个宠物可以有多个用户(所有者),所以我的连接表是 users_pets。

-我将 XML 文件转换为 javascript 对象并循环遍历它以插入数据。我的问题是我需要异步循环,因为我不想在 pets 表中重复记录。对于每次迭代,我都在检查宠物是否存在,如果不存在我正在创建它,否则我将获取它的 ID 并将其插入到要插入的用户中。如果这不是异步的,则会同时触发多个“findOrCreate”并在数据库中创建宠物副本。

如何优化这段代码?对于 125 个用户的 xml 和他们的宠物,大约需要 85 秒,这是巨大的。

XML:

<users>
<user>
<pets>
<pet>
</pet>
</pets>
</user>
...
</users>

代码:

async.eachSeries(users, function(user, callback) {
var pets = [];
async.eachSeries(user.pets, function(pet, callback) {
pets.findOrCreate({name: pet.name}).exec(function (err,userPet) {
pets.push(userPet.id);
callback();
});
}, function(err){
users.create({name: user.name, pets: pets})
.exec(function(err, created) {
callback();
});
});
}, function(err){
...
});

最佳答案

在 sails.js 中,您可以将一组对象发送到 .create() 并将一组 ID 发送到 .find()。所以你可以这样做:

Pet
.find(user.pets)
.then(function (pets) {
return User.create({ name: user.name, pets: pets });
})
.then(function (users) {
// done
});

关于javascript - 如何优化循环以插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29447755/

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