我有一个服务器端脚本,它尝试使用脚本中计算的新数据更新已存在的行。当那里没有一行时,它会很好地添加到表中。但是当我尝试更新行时,我在应用程序中收到错误,告诉我具有该id的项已经存在。 下面是我用于脚本的代码。任何提示都将非常感激。
function insert(item, user, request) {
var table = tables.getTable('Reviews');
table.where({
text: item.id
}).read({
success: upsertItem
});
function upsertItem(existingItems) {
if (existingItems.length == 0) {
item.numReviews = 1;
item.rating = item.reviews;
request.execute();
} else {
item.id = existingItems[0].id;
item.numReviews = existingItems[0].numReviews + 1;
var average = existingItems[0].reviews / item.numReviews;
item.reviews = existingItems[0].reviews + item.reviews;
item.rating = average;
table.update(item, {
success: function(updatedItem) {
request.respond(200, updatedItem)
}
});
}
}
}
答案 0 :(得分:1)
对于初始查询,您希望通过id字段进行查询:
table.where({
id: item.id
}).read({
success: upsertItem
});
编辑:进一步澄清
您的查询对象{text: item.id}
实际上已转换为SQL查询select * from Reviews where text = item.id
,其中item是POST正文。因此,您的代码示例正在搜索文本列中包含id值的Reviews。它没有找到任何,所以upsert()回调函数if if语句因为existingItems为空而求值为true,并尝试通过调用request.execute()来插入该项。
根据我建议的更改,使用{id: item.id}
会变成一个类似的查询
select * from Reviews where id = item.id
所以它会在id列中搜索带有匹配id值的Review。