您好我正在尝试将从XML文件中获取的数据插入到MySql数据库中。我正在使用Sails.js和waterline进行查询。 我的桌子是用户和宠物,用户可以有多个宠物,宠物可以有多个用户(所有者),所以我的连接表是users_pets。
-I将XML文件转换为javascript对象并循环插入数据。我的问题是我需要循环异步,因为我不想在宠物表中重复记录。对于每次迭代,我正在检查宠物是否存在,是否我没有创建它,否则我将其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){
...
});
答案 0 :(得分:1)
在sails.js中,您可以将一组对象发送到.create()
,将一组ID发送到.find()
。所以你可以这样做:
Pet
.find(user.pets)
.then(function (pets) {
return User.create({ name: user.name, pets: pets });
})
.then(function (users) {
// done
});