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

Azure Mobile Services Node.js update column field count during read query

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

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

拜托,我怎样才能通过 Azure 移动服务中的读取脚本完成该操作。

提前致谢,

查看 online reference 中的示例。在您正在跟踪的 table 的 table 阅读脚本中,您需要执行类似的操作。目前尚不清楚您是在跟踪用户正在阅读的同一 table 中,还是在单独的计数中 table,但流程是相同的。

请注意,如果您真的想跟踪这个,您应该将读取请求记录到另一个 table 并在事后对它们进行统计,或者使用外部分析系统(Google Analytics、Flurry、MixPanel 、Azure Mobile Engagement 等)。如果多部手机同时从 table 中读取,这种更新记录中单个计数字段的方法将不准确——它们将从跟踪 table 中读取相同的值 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');
        }
    }

};

希望这对您有所帮助。

编辑:修复上面的函数签名和 table 名称,在下面添加另一个示例

如果您想跟踪阅读了哪些经文(如果您的应用程序可以一次请求一个)您需要执行 "counting" 请求并在 "verses" 请求之后更新,因为脚本不会预先告诉您用户请求的是哪一节经文记录。

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');
                }
            }
        }
    });

};

另一个注意事项:确保您的计数 table 在您选择的列上有一个索引(table第一个示例中的名称,第二个示例中的 verseId)。