为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 201 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号