我想使用服务器端代码(node.js)更新Azure Mobile Services中特定行中的列。
这个想法是,每当用户从我的移动应用程序运行读取查询时,列A(存储数字)将使其计数增加1(i ++)。
请问,我如何从Azure移动服务中的读取脚本中实现这一目标。
提前致谢,
答案 0 :(得分:0)
查看online reference中的示例。在您要跟踪的表格的表格中,您需要执行以下操作。目前还不清楚您是在用户正在阅读的同一个表中进行跟踪,还是在单独的计数表中进行跟踪,但流程是相同的。
请注意,如果您确实想要跟踪此情况,则应将读取请求记录到另一个表格并在事后记录,或使用外部分析系统(Google Analytics,Flurry,MixPanel,Azure移动互动等)。如果多个电话同时从表中读取,这种更新记录中单个计数字段的方式将不准确 - 它们将从跟踪表中读取相同的值x,递增它,并使用相同的值x + 1。
function read(query, user, request) {
var myTable = tables.getTable('counting');
myTable.where({
tableName: 'verses'
}).read({
success: updateCount
});
function updateCount(results) {
if (results.length > 0) {
// tracking record was found. update and continue normal execution.
var trackingRecord = results[0];
trackingRecord.count = trackingRecord.count + 1;
myTable.update(trackingRecord, { success: function () {
request.execute();
});
} else {
console.log('error updating count');
request.respond(500, 'unable to update read count');
}
}
};
希望这有帮助。
编辑:上面修复了功能签名和表名,在下面添加了另一个例子
如果你想跟踪哪些经文被阅读(如果你的应用可以一次请求一个),你需要进行"计数"在"经文"之后请求和更新请求,因为脚本没有预先告诉你哪个经文记录了用户请求的内容。
function read(query, user, request) {
request.execute( { success: function(verseResults) {
request.respond();
if (verseResults.length === 1) {
var countTable = tables.getTable('counting');
countTable.where({
verseId: verseResults[0].id
}).read({
success: updateCount
});
function updateCount(results) {
if (results.length > 0) {
// tracking record was found. update and continue normal execution.
var trackingRecord = results[0];
trackingRecord.count = trackingRecord.count + 1;
countTable.update(trackingRecord);
} else {
console.log('error updating count');
}
}
}
});
};
另一个注意事项:确保您的计数表在您选择的列上有一个索引(第一个示例中的tableName,第二个示例中的verseId)。