Cloud函数用于从内部子项对Firebase子项进行排序

时间:2018-01-07 05:07:11

标签: android firebase

我需要解决一个问题。我想要一个云函数,我需要遍历每个具有uniqueID的帖子,并且我想根据TotalReactions的值对这些uniqueID进行排序。对我来说更生动,假设第一篇文章的totalReactions = 5,第二篇文章的totalReactions = 6,那么我需要另一个RealTimeDatabase" PostArranged"它按降序对它们进行排序,因此第二个具有Total Reaction的帖子将首先出现,然后跟随TotalReaction较少的那个... 以下是我的firebase实时数据库的样子:

Posts
 -L29TD-nsUYRu3wYcCQl
     Caption: "First Screenshot"
     CurrentUserReaction: "notreacted"
     Image: "https://firebasestorage.googleapis.com/v0/b/nep..."
     ReactingUser
        <user-id>:"1"
        <user-id>:"2"
     Time: "13:40:54"
     TotalReactions: "2"
     Unique: "-L29TD-nsUYRu3wYcCQl"
     UserPhoto: "https://firebasestorage.googleapis.com/v0/b/nep..."
     Username: "Me"

任何帮助将不胜感激..

2 个答案:

答案 0 :(得分:0)

这不是做你想做的事情的好方法。在这种方法中,每次添加反应时都必须将数据库分类到另一个“ArrangedDatabase”,这将以高频率发生。因此,使用云功能执行此操作将非常昂贵。

而是使用 orderByChild() orderByKey() orderByValue()在查询数据时对数据进行排序。

Sorting data - Firebase documentation这表明它非常好。

答案 1 :(得分:0)

对于想要在Firebase提供的RecyclerViewAdapter中执行此操作的任何人,都可以轻松完成...当您传递这4个参数时。不要传递数据库引用,而是创建一个新查询,并确保通过OrderByChild(),OrderByValue()或您想要订购的任何内容对该事物进行排序......即 就我而言,我会做这样的事情:

q = mDatabaseReference.orderByChild("TotalReactions");

并将q作为参数传递给FirebaseAdapter,如下所示:

 FirebaseRecyclerAdapter<Posts,PostViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Posts, PostViewHolder>(
            Posts.class, R.layout.each_post_layout , PostViewHolder.class, q
    ) {

。 }