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:按儿童计数排序的查询的主要内容,如果未能解决你的问题,请参考以下文章

在 SQLite 中按计数排序单行数组

Laravel Eloquent 按关系计数排序

Flutter Firebase 儿童计数

MySQL Select 语句 - 两个表,按其他表的计数对一个表进行排序

在 Objection.js 中按急切结果计数排序记录并实现分页?

数据框:如何在 Scala 中分组/计数然后按计数排序