亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

OrderBy 查詢 - 我可以通過存儲在 firebase 中的孫子“投票”來訂購嗎?

OrderBy 查詢 - 我可以通過存儲在 firebase 中的孫子“投票”來訂購嗎?

Helenr 2022-06-04 17:08:34
我一直在嘗試找到一種方法來通過子節點“投票”進行查詢,以按“投票”的數量對數據進行排序。我很確定因為我將數據存儲在 firebase 中的方式無法查詢,但我目前必須以這種方式存儲它。  {     "45" : {       "Biological and Ecological" : {         "Votes" : 1        }    },     "567" : {       "Technology" : {         "Votes" : 2        }    },     "620" : {       "Technology" : {          "Votes" : 1        }  },     "702" : {       "Social and Behavioral" : {          "Votes" : 1        }     } }我試圖通過孩子“投票”訂購有沒有辦法做到這一點?下面是它當前顯示的方法我知道 .OrderbyChild("Votes") 沒有正確定義路徑,但有沒有辦法實現這一點?   Query query = FirebaseDatabase.getInstance().getReference("CountLikes/").orderByChild("Votes");   query.addListenerForSingleValueEvent(new ValueEventListener() {    @Override        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {            for(DataSnapshot child: dataSnapshot.getChildren()) {                for(DataSnapshot grandchild: child.getChildren()) {                    arrayList.add("Project " + child.getKey() + "         " + grandchild.getKey() + "        " + (String.valueOf(grandchild.child("Votes").getValue(Long.class))));                     adapter.notifyDataSetChanged();                }                }}        @Override        public void onCancelled(@NonNull DatabaseError databaseError) {            throw databaseError.toException();        }    });
查看完整描述

3 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

這在一定程度上取決于您在 RealtimeDatabase 中實際設置數據模型的方式。在這種情況下,您嘗試排序的數據沒有一致的路徑(似乎不同的投票類型)。


如果你有類似的東西:


CountLikes: [ // collection

    docId: { // document

        typeOfVote: { // map name

            "votes": number // vote count

        }

    }

]

如果“投票”與“typeOfVote”分開,您嘗試按孩子訂購的方式將成為可能,因為現在您無法通過潛在的通配符按孩子訂購(例如,獲得比“技術”更深的級別)。


CountLikes: [

    docId: {

        "votes": number,

        "type": typeOfVote

    }

]

有了這個,您的 orderByChild “投票”可能會起作用:)


FirebaseDatabase.getInstance().getReference("CountLikes/").orderByChild("votes")


查看完整回答
反對 回復 2022-06-04
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

您知道“生物和生態”等屬性的所有可能值嗎?然后你可以只用一個 for 循環并選擇 ....gerReference("CountLikes").orderbychild(property[i]+"/votes").....

我知道這是一種奇怪的方式,但是正如您所說,您不能更改結構,即使我建議您在數據庫中保留另一個數據集以獲取屬性值


查看完整回答
反對 回復 2022-06-04
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

Firebase 實時數據庫可以根據屬性查詢位置的子節點,只要該屬性位于具有固定路徑的已知位置即可。


在您的情況下,子節點不在固定路徑上(因為TechnologyandBiological and Ecological鍵不固定),因此您當前的數據結構無法進行此查詢。


要允許查詢,請重組數據以將其轉換為平面列表。例如,這可能有效:


 "45" : {

   "Category": "Biological and Ecological",

   "Votes" : 1

 }

 "567" : {

   "Category": "Technology",

   "Votes" : 2

 },

 "620" : {

   "Category": "Technology",

    "Votes" : 1

 },

 "702" : {

   "Category": "Social and Behavioral",

   "Votes" : 1

 }


查看完整回答
反對 回復 2022-06-04
  • 3 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號