试用了Sails.js,我正在编写一个应用程序,它从第三方API导入数据并保存到MySQL表中。基本上我试图将数据同步到我的应用程序进行进一步分析,更新我的记录或根据需要创建新记录。Sails.js模型 - 插入或更新记录
我已经浏览了Sails的API,我看到了查找,创建和更新记录的方法,但没有内置方法来根据情况插入/更新记录。我忽略了一些东西,还是我需要自己实现这个?
如果我必须自己实现这个,有没有人知道插入/更新的良好设计模式?
这是我觉得它可能看起来像......
_.each(importedRecords, function(record){
MyModel.find({id: record.id}).exec(function findCB(err, found){
if(found.length){
MyModel.update(record.id, task).exec(function(err, updated){
if(err) { //returns if an error has occured, ie id doesn't exist.
console.log(err);
} else {
console.log('Updated MyModel record '+updated[0].name);
}
});
}else{
MyModel.create(record).exec(function(err, created){
if(err) { //returns if an error has occured, ie invoice_id doesn't exist.
console.log(err);
} else {
console.log('Created client record '+created.name);
}
});
}
});
});
我是否在朝着正确的方向,或者是有一个更优雅的解决方案?
此外,我正在处理这个应用程序中的很多不同模型,这意味着要在我的每个模型中重新创建这个代码块。有没有一种方法可以扩展基础模型对象,为所有模型添加此功能。
感谢, 约翰
感谢您的回复。我在我的搜索中早些时候看到了这个函数,但是因为我无法知道它是否找到或不得不创建记录,所以我决定实现我想要的功能。如果找到的操作返回true,那么我想用新数据更新记录。 – 2014-09-24 19:59:50
不客气。这听起来像有用的功能。也许你应该为水线提交增强票。 – 2014-09-25 05:58:05
FindOrCreate()的文档链接已损坏,缺少爆炸声。 http://sailsjs.org/#!/documentation/reference/waterline/models/findOrCreate.html – 2015-06-02 23:39:19