Azure移动服务Node.js在读取查询期间更新列字段计数

时间:2015-08-11 22:33:28

标签: azure-mobile-services

我想使用服务器端代码(node.js)更新Azure Mobile Services中特定行中的列。

这个想法是,每当用户从我的移动应用程序运行读取查询时,列A(存储数字)将使其计数增加1(i ++)。

请问,我如何从Azure移动服务中的读取脚本中实现这一目标。

提前致谢,

1 个答案:

答案 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)。