Firebase:按儿童计数排序的查询
Posted
技术标签:
【中文标题】Firebase:按儿童计数排序的查询【英文标题】:Firebase: Query ordered by children count 【发布时间】:2017-11-22 02:59:33 【问题描述】:在我的 firebase 数据库中,我有一个名为 Hashtag 的孩子。该子项包含主题标签的名称,并且该子项包含这些主题标签之外的帖子。
例如
Hashtags
L #firstHashtag
L post1: true
L post2: true
L post3: true
L #secondHashtag
L post4: true
L post5: true
L post6: true
L post7: true
L post8: true
L #thirdHashtag
L post9: true
这就是我的数据库的样子。
第一个主题标签包含三个帖子。
第二个标签有五个帖子。
第三个标签有一个帖子。
这是我的标签参考
var HASHTAG_REFERENCE = Database.database().reference().child("Hashtags")
我的目标是按最受欢迎的顺序查询主题标签。帖子最多的主题标签是最受欢迎的主题标签。帖子最少的主题标签是最不受欢迎的主题标签。
所以最流行的主题标签是 secondHashtag,我想首先收到该主题标签的名称。最不受欢迎的标签是thirdHashtag,我想最后收到那个标签的名称
我如何查询我的数据库,以便它可以根据孩子的帖子数对他们进行排序?
【问题讨论】:
【参考方案1】:没有可让您按子项数量排序的本机查询。相反,您必须维护存储在另一个子项中的帖子计数,并按该值对主题标签进行排序。
您有两种选择。每当将帖子添加到主题标签时,您都可以维护客户端的计数。或者,编写一个云函数,在发生变化时自动更新计数。无论哪种情况,请务必使用事务以避免来自多个写入者的冲突。
另外请记住,由于您想要帖子计数的相反顺序,因此您必须存储一个自然地从大多数帖子到最少帖子排序的值。您可以存储负数,以确保最受欢迎的帖子(因此具有最小值)排在最不受欢迎的帖子(具有最大值)之前。
【讨论】:
以上是关于Firebase:按儿童计数排序的查询的主要内容,如果未能解决你的问题,请参考以下文章
MySQL Select 语句 - 两个表,按其他表的计数对一个表进行排序