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



我问了几个关于LimitToLast()EndAt()的使用以及从数据末尾向后翻页的问题,因为我试图使用OrderBy("Views")获取前10个查看次数最多的数据,然后在向下滚动时获取其他10个。

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

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

{
"-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;

提前感谢并对长帖感到抱歉:(

这个快速的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}

如果我们按CCD_ 6订购,并用这个查询记下最后10个音符:orderBy=";视图"&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=";视图"&limitToLast=10&endAt=20-Mps4u0-6dOElpUhjzYY";。据我所见,这给出了预期的结果。

最新更新