如何在 Flutter 中从 Firestore 订购数据,orderBy 订购不正确

Posted

技术标签:

【中文标题】如何在 Flutter 中从 Firestore 订购数据,orderBy 订购不正确【英文标题】:How to order data from Firestore in Flutter, orderBy not ordering correct 【发布时间】:2020-01-28 22:31:45 【问题描述】:

我正在构建一个应用程序,用户可以在其中写入我的数据库并向其他用户提问,例如医生应用程序。医生可以在哪里回答问题。

我想按日期排序问题,我想按最新和最受欢迎的问题排序。

我尝试通过以下方式订购最新的:

日期:“2019 年 9 月 29 日”

Firestore.instance
        .collection("Questions")
        .orderBy("date", descending: true) // 1 will be last, 31 will be latest
        .snapshots(),

但这似乎不起作用。所以我想知道如何从firebase的查询中正确排序数据。还是我必须将日期作为 long 存储在 firebase 中,然后再进行转换?

另外,我想根据观看特定问题的用户数量来排序最受欢迎的问题:

questionsView:“3”,questionsView:“1032”等

Firestore.instance
        .collection("Questions")
        .orderBy("questionsView")
        .snapshots(),

但这也不能正确排序。

我看到了传奇人物 Frank von Puffen 的一篇很棒的帖子,但我不太明白,所以我想知道是否有人可以帮助我解决这个问题。

这是他的帖子: Ordering Data In FireStore

最好的问候, 鲁斯本

【问题讨论】:

【参考方案1】:

我尝试通过以下方式订购最新的:

日期:“2019 年 9 月 29 日”

但这似乎行不通。

因为您的date 属性是字符串类型,所以它不起作用。排序字符串时,请记住字符串是按lexicographically 排序的。

所以我想知道如何从 firebase 的查询中正确排序数据。

要解决此问题,您应该将属性类型更改为Date。在这种情况下,您将获得按时间顺序排列。

或者我是否必须将日期作为 long 存储在 firebase 中,然后进行转换?

排序元素的解决方案适用于实时数据库,不是适用于 Cloud Firestore。

我看到了传奇人物 Frank von Puffen 的一篇很棒的帖子,但我不太明白,所以我想知道是否有人可以帮助我解决这个问题。

在这种情况下,station 属性将整数作为字符串值保存,这实际上是一回事。在这种情况下,解决方案是将属性的类型更改为数字或填充数字,以便它们都具有相同的长度,但在您的情况下,您的属性的类型应该明确地是 Datenot 一个字符串。

【讨论】:

嗨@AlexMamo,感谢您的回复。那么这将是最好的解决方案吗? -> new DateFormat("d MMMM yyyy HH:mm").format(new DateTime.now()); -> 我想知道的原因是因为我想在 UI 中呈现该格式的数据。编辑:或者没关系,无论如何,这最终会成为一个字符串。我在检索数据时转换它。 不客气。为此,请检查 this 并告诉我它是否有效。 嗨鲁斯本!我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢! @AlexMamo 哇他得到答案后就跑了啊哈哈哈

以上是关于如何在 Flutter 中从 Firestore 订购数据,orderBy 订购不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中从 Firebase Auth 获取用户 ID?

如何在flutter中从firebase获取数据

如何在 BigQuery 中从 firestore 导出的数组中查找元素

Firestore如何在回收站视图中从firestore检索数据

如何在 Swift 中从 Cloud FireStore Firebase 访问特定字段

如何在flutter中获取firestore文档的documentid?