如何检索 Azure 移动服务表的行位置

How retrieve row position for azure mobile services tables

我将 Azure 移动服务(在 HTML 客户端中)用于一个简单的 Score Wall 应用程序。

首先该应用获得前 100 名分数

client.getTable("ScoreWall").orderBy("score").take(100).read().then(...

稍后显示当前用户位置

client.getTable("ScoreWall").where({"userId":uid}).select("userId","score").read().then(...

但我想检索当前用户在世界排名中的位置。我没有找到 select 的任何文档,例如:

select("row_position","userId","score")

如何检索这些数据?

想不出在查询中完成这一切的好方法,但给定一个只有 100 的数据集,对进行一些 post 处理没有任何重大影响。这是我做的(我在 js 后端得到它,因为我有一个可以尝试)。

function returnAll(req, res) {
    var todoTable = req.service.tables.getTable('todoitem');
    var n = 1;
    var q = todoTable.select(function () {
        var obj = { num: n, text: this.text };
        n++;
        return obj;
    }).orderBy("text").take(100);

    q.read({
        success: function (results) {
            var Sarah = {};
            results.forEach(function (item) { if (item.text === "Sarah") { Sarah = item } });
            res.send(200, { "results": results, "sarah": Sarah });
        },
        error: function (err) {
            res.send(500, err);
        }
    });
}

显然,这是一个愚蠢的演示,但它明白了要点。结果如下:

{
    "results": [
        {
            "num": 1,
            "text": "Angela"
        },
        {
            "num": 2,
            "text": "Chris"
        },
        {
            "num": 3,
            "text": "John"
        },
        {
            "num": 4,
            "text": "Nikesh"
        },
        {
            "num": 5,
            "text": "Sarah"
        }
    ],
    "sarah": {
        "num": 5,
        "text": "Sarah"
    }
}

在我的示例中,如果您要将其扩展到数百万行,则有几件事需要注意(但我可能会使用单独的作业来计算前 100 名并将其转储到 table 或定期标记具有排名的用户对象以解决该比例),但对于 100,它是体面的。