祝你一天愉快
我正在使用 Firebase Database Rest API 來獲取按(視圖)排序的前 10 個帖子,當我獲取前 10 個帖子時,沒有問題,像這樣:
https://ameen-66522.firebaseio.com/Main/News/Categories/Education/.json?print=pretty&orderBy="Views"&limitToLast=10
{
"-Mn7-ZxkUPO01ifh2tpEn" : {
"Text" : "Im 11",
"Title" : "some title",
"Views" : 11
},
"-Mn7-ZxkUPO01ifh2txpEn" : {
"Text" : "Im 11 Two",
"Title" : "some title",
"Views" : 11
},
"-Mn7-ZxkUPO01ifhds2tpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 13
},
"-Mn7-ZxkUPO01ifhewtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 14
},
"-Mn7-ZxkUPO01ifhtdxpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 15
},
"-Mn7-ZxkUPO01ifhtp11En" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 16
},
"-Mn7-ZxkUPO01sdifhtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 17
},
"-Mn7-ZxkUPOd01ifh2tpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 18
},
"3342323231" : {
"Text" : "d",
"Title" : 24,
"Views" : 19
},
"444444444444" : {
"Text" : "dd",
"Title" : "xzx",
"Views" : 20
}
}
當我按照最高視圖的順序對前 10 個元素進行排序時,最后一個 id 將是-Mn7-ZxkUPO01ifh2txpEn而當我從LastId和LastValue開始獲取另外 11 個元素時,它將回傳重復資料的結果,因為有兩個元素具有( Views ) 的相同值,但不應該這樣做,因為我已經通過了LastValue和LastId像這樣:
https://ameen-66522.firebaseio.com/Main/News/Categories/Education/.json?print=pretty&orderBy="Views"&limitToLast=11&endAt=11,"-Mn7-ZxkUPO01ifh2txpEn"
我預計它會回傳一個重復的結果,它只是最后一個元素-Mn7-ZxkUPO01ifh2txpEn我可以輕松洗掉它,但為什么它會回傳前 10 個中顯示的其他元素?
我盡量不讓任何專案包含重復值并且結果是正確的并且沒有重復的帖子那么這個問題的解決方案是什么?
抱歉這篇長文章,謝謝你:)
uj5u.com熱心網友回復:
當您使用https://ameen-66522.firebaseio.com/Main/News/Categories/Education/.json?print=pretty&orderBy="Views"&limitToLast=10獲得結果的最后一頁時,結果中的前兩個節點是:
"-Mn7-ZxkUPO01ifh2tpEn" : {
"Text" : "Im 11",
"Views" : 11
},
"-Mn7-ZxkUPO01ifh2txpEn" : {
"Text" : "Im 11 Two",
"Views" : 11
},
在您的問題的呼叫中,您傳遞了-Mn7-ZxkUPO01ifh2txpEn密鑰,這是您已經擁有的結果中的第二個密鑰。所以這也是 Firebase 開始/結束它回傳的資料片段的地方。
如果您只想要一個重疊的專案,請使用密鑰-Mn7-ZxkUPO01ifh2tpEn:https : //ameen-66522.firebaseio.com/Main/News/Categories/Education/.json?print=pretty&orderBy="Views"&limitToLast=11&endAt=11,"- Mn7-ZxkUPO01ifh2tpEn"
這將為您提供以下結果:
{
"-Mn7-ZxkUPO01dxifhtpEn" : {
"Text" : "some text",
"Views" : 1
},
"-Mn7-ZxkUPO01iddfh2tpEn" : {
"Text" : "some text",
"Views" : 2
},
"-Mn7-ZxkUPO01idsdfh2tpEn" : {
"Text" : "some text",
"Views" : 3
},
"-Mn7-ZxkUPO01idsdfhtpEn" : {
"Text" : "some text",
"Views" : 4
},
"-Mn7-ZxkUPO01idxfh2tpEn" : {
"Text" : "must 5",
"Views" : 6
},
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Text" : "some text",
"Views" : 5
},
"-Mn7-ZxkUPO01ifdshtpEn" : {
"Text" : "must 7",
"Views" : 7
},
"-Mn7-ZxkUPO01ifh21tpEn" : {
"Text" : "some text",
"Views" : 8
},
"-Mn7-ZxkUPO01ifh2dstpEn" : {
"Text" : "some text",
"Views" : 9
},
"-Mn7-ZxkUPO01ifh2tpEdsn" : {
"Text" : "some text",
"Views" : 10
},
"-Mn7-ZxkUPO01ifh2tpEn" : {
"Text" : "Im 11",
"Views" : 11
}
}
我建議在這樣的重現中使用更具可讀性和可識別性的鍵,因為很容易忽略第一個片段中這兩個鍵的差異。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/369204.html
下一篇:如何在狀態中設定監聽器?
