我使用Loopback框架开发了一个API,因为我必须insert or update
到表。
我的表格如下:
userid bbid saved id(PK)
1 5 1000 1
所以当下次if(bbid = 5)时它应该更新上面的行,如果没有bbid = 5那么它应该插入到上面的表中。
我尝试了以下内容:
app.models.modelname.upsert({bbid:bb.id, saved: Saved, userid:1}
,function(err, res){
});
编辑COMPOSITE ID:
app.models.modelname.upsert({bbid:vvvv.bbid, userid:1,saved:amountSaved},function(err, res){
});
它也通过Loopback doc说了
upsert - checks if the instance (record) exists, based on the designated
ID property, which must have a unique value; if the instance already exists,
the method updates that instance. Otherwise, it inserts a new instance.
但在我的情况下,它应检查bbid not id
但它每次插入。请分享您的想法。提前致谢
编辑UPSERT:
我的流程如下:
Fetch from table1 and loop that response and calculate the saved and upsert it into another table(table2 (this is where upsert should happen)). Also the fetching from table1 will happen frequently so suppose consider if is happens 2nd time it should update the already present bbid..
答案 0 :(得分:6)
您可以使用findOrCreate
方法,如下所示:
app.models.modelname({where: {bbid:bb.id} }, {bbid:bb.id, saved: Saved, userid:1}, function(err, instance) {
if (err){
cb(null, err);
}
cb(null, instance);
});
答案 1 :(得分:1)
loopback中有两种方法,一种是简单upsert,另一种是upsertWithWhere。要根据where条件插入或更新你必须使用upsertWithWhere方法upsert只插入数据。 你正在使用
app.models.modelname.upsert({bbid:bb.id, saved: Saved, userid:1}
,function(err, res){});
改为使用
app.models.modelname.upsertWithWhere({bbid:bb.id, saved: Saved, userid:1}
,function(err, res){});
这将解决您的问题。
注意:这只会更新单个实例。如果在条件结果的地方返回多个实例,则会抛出错误。