Firebase 数据库 Rest Api:使用 LimitToLast() 时如何获取下一页

Firebase Database Rest Api: How to get the next page when use LimitToLast()

我问了几个关于 LimitToLast()EndAt() 的使用的问题,还有从数据末尾向后分页,因为我正在尝试使用 [ 获取前 10 个查看最多的数据=15=] 然后向下滚动时得到另外10个。

当获取按 Views 排序的前 10 个数据时,我得到了正确的结果,但是我的问题 是如何获得 正确节点 这样我就可以用它来获取包含其他 10 个数据的(上一页) 即使存在具有相同 Views 值的节点也没有任何问题。

假设我们必须获取具有最低 Views 值的节点并将其存储在 string 中,并且在获取其他 10 个数据时我们这样使用它: OrderBy("Views").LimitToLast(11).EndAt(LastValue,LastId) 但我总是得到不正确且经常重复的结果,尤其是当存在具有相同 Views 值的数据时。 My Json Stracture 30 Nodes :

{
  "-Mps4qWpgU-L5E3OfAMD" : {
    "Text" : 1,
    "Views" : 20
  },
  "-Mps4qoSPhzh3Hzu1i2y" : {
    "Text" : 2,
    "Views" : 20
  },
  "-Mps4qxhzwbQ80snD3jF" : {
    "Text" : 3,
    "Views" : 20
  },
  "-Mps4r60gkcsFjI33d-q" : {
    "Text" : 4,
    "Views" : 20
  },
  "-Mps4rF4Ku1X1FIyR0M8" : {
    "Text" : 5,
    "Views" : 20
  }
 More...
}

我的 C# 代码:

    public class PostData
    {
        public int Views{get;set;}
        public string Text{get;set;}
    }
//Get First 10
var Data = await firebaseclient
                .Child("Education/")
                .OrderBy("Views")
                .LimitToLast(10)
                .OnceAsync<PostData>();
                //Order The Data By Descending on their Views And Key
                var sortedData = Data.OrderByDescending(x=>x.Object.Views).ThenByDescending(x=>x.Key);
                //Save The Last Id (lowest value of Views) and his Value Of Views
               string LastID = sortedData.Last().Key;
               int LastValue = sortedData.Last().Object.Views;

//Get More (Previous Page)
var Data = await firebaseclient
                .Child("Education/")
                .OrderBy("Views")
                .EndAt(LastValue,LastID)
                .LimitToLast(11)
                .OnceAsync<PostData>();
                //Order The Data By Descending on their Views And Key
                var sortedData = Data.OrderByDescending(x=>x.Object.Views).ThenByDescending(x=>x.Key);
                //Update The Last Id and his Value Of Views
               string LastID = sortedData.Last().Key;
               int LastValue = sortedData.Last().Object.Views;

提前致谢,抱歉拖了这么久 post :)

这个快速 jsbin 表明节点的正确顺序是:

"-Mps4qWpgU-L5E3OfAMD": {"Text":1,"Views":20},
"-Mps4qoSPhzh3Hzu1i2y": {"Text":2,"Views":20},
"-Mps4qxhzwbQ80snD3jF": {"Text":3,"Views":20},
"-Mps4r60gkcsFjI33d-q": {"Text":4,"Views":20},
"-Mps4rF4Ku1X1FIyR0M8": {"Text":5,"Views":20},
"-Mps4rOgbcEeIZ-Kyi0I": {"Text":6,"Views":20},
"-Mps4rYAe5dIPytLvk4E": {"Text":7,"Views":20},
"-Mps4rgdzKlylkoeOTGc": {"Text":8,"Views":20},
"-Mps4rpqUdlVdfsatirv": {"Text":9,"Views":20},
"-Mps4rzCa-YS60CqXzfy": {"Text":10,"Views":20},
"-Mps4s7am1ZCuLtBp0nk": {"Text":11,"Views":20},
"-Mps4sGxBOgFsTLFSqMk": {"Text":12,"Views":20},
"-Mps4sQ9CLYNFQ4Uynhb": {"Text":13,"Views":20},
"-Mps4sZY5egXpf5_CmFi": {"Text":14,"Views":20},
"-Mps4shiJxx2dQVwen-Y": {"Text":15,"Views":20},
"-Mps4srZmVvPvImOf48D": {"Text":16,"Views":20},
"-Mps4tQpS0qYHlwHd8jJ": {"Text":18,"Views":20},
"-Mps4tZujfdt-q1EnjGq": {"Text":19,"Views":20},
"-Mps4thzzjBtFaRyRcxu": {"Text":20,"Views":20},
"-Mps4tr7SE6t7qZc2513": {"Text":21,"Views":20},
"-Mps4u0-6dOElpUhjzYY": {"Text":22,"Views":20},
"-Mps4u9G_112glr6ijQl": {"Text":23,"Views":20},
"-Mps4uJ-j75wAdmth6lb": {"Text":24,"Views":20},
"-Mps4uS8BCBb7FASfZJ5": {"Text":25,"Views":20},
"-Mps4uaMoWvGEvKNCcVc": {"Text":26,"Views":20},
"-Mps4ujkjYW5CeqSFPqU": {"Text":27,"Views":20},
"-Mps4usz_FyTYx49oz6e": {"Text":28,"Views":20},
"-Mps4v1HhVdmlOOZhYs_": {"Text":29,"Views":20},
"-Mps4vB9i4F0irpPeRgz": {"Text":30,"Views":20},
"-Mps4tH5mnQlklXP5o3I": {"Text":17,"Views":50}

如果我们按 Views 排序并使用此查询记录最后 10 个注释:orderBy="Views"&limitToLast=10 我们将得到这些结果:

{
  "-Mps4tH5mnQlklXP5o3I" : { "Text" : 17, "Views" : 50 },
  "-Mps4u0-6dOElpUhjzYY" : { "Text" : 22, "Views" : 20 },
  "-Mps4u9G_112glr6ijQl" : { "Text" : 23, "Views" : 20 },
  "-Mps4uJ-j75wAdmth6lb" : { "Text" : 24, "Views" : 20 },
  "-Mps4uS8BCBb7FASfZJ5" : { "Text" : 25, "Views" : 20 },
  "-Mps4uaMoWvGEvKNCcVc" : { "Text" : 26, "Views" : 20 },
  "-Mps4ujkjYW5CeqSFPqU" : { "Text" : 27, "Views" : 20 },
  "-Mps4usz_FyTYx49oz6e" : { "Text" : 28, "Views" : 20 },
  "-Mps4v1HhVdmlOOZhYs_" : { "Text" : 29, "Views" : 20 },
  "-Mps4vB9i4F0irpPeRgz" : { "Text" : 30, "Views" : 20 }
}

当我们按照上面的顺序排序时,原始列表中的第一个结果是:

"-Mps4u0-6dOElpUhjzYY": {"Text":22,"Views":20},

因此,这些是您在后续调用中需要使用的值和键,以使页面位于最后一个页面之上:orderBy="Views"&limitToLast=10&endAt=20,"-Mps4u0-6dOElpUhjzYY"。据我所知,这给出了预期的结果。