更新 Azure 移动服务数据库中的现有项目
updating an existing item in an azure mobile service database
我有一个服务器端脚本,它试图用脚本中计算的新数据更新现有的行。当那里没有行时,它会添加到 table fine.However 当我尝试更新行时,我的应用程序出现错误,告诉我具有该 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)
}
});
}
}
}
对于您的初始查询,您希望通过 id 字段进行查询:
table.where({
id: item.id
}).read({
success: upsertItem
});
编辑:进一步说明
您的查询对象 {text: item.id}
有效地变成了 SQL 查询 select * from Reviews where text = item.id
,其中 item 是 POST 主体。因此,您的代码示例正在搜索评论,其中文本列中有一个 id 值。它没有找到任何东西,因此 upsert() 回调函数 if 语句评估为 true 因为 existingItems 为空,并尝试通过调用 request.execute().
插入该项目
根据我建议的更改,使用 {id: item.id}
,变成如下查询
select * from Reviews where id = item.id
因此它将在 id 列中搜索具有匹配 id 值的评论。
我有一个服务器端脚本,它试图用脚本中计算的新数据更新现有的行。当那里没有行时,它会添加到 table fine.However 当我尝试更新行时,我的应用程序出现错误,告诉我具有该 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)
}
});
}
}
}
对于您的初始查询,您希望通过 id 字段进行查询:
table.where({
id: item.id
}).read({
success: upsertItem
});
编辑:进一步说明
您的查询对象 {text: item.id}
有效地变成了 SQL 查询 select * from Reviews where text = item.id
,其中 item 是 POST 主体。因此,您的代码示例正在搜索评论,其中文本列中有一个 id 值。它没有找到任何东西,因此 upsert() 回调函数 if 语句评估为 true 因为 existingItems 为空,并尝试通过调用 request.execute().
根据我建议的更改,使用 {id: item.id}
,变成如下查询
select * from Reviews where id = item.id
因此它将在 id 列中搜索具有匹配 id 值的评论。