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

时间:2019-09-29 10:01:11

标签: firebase flutter google-cloud-firestore

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

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

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

  

日期:“ 2019年9月29日”

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

但这似乎不起作用。因此,我想知道如何从Firebase查询中正确排序数据。还是我必须将日期存储在Firebase中较长的时间,然后再进行转换?

此外,我想根据观看以下问题的用户数量来订购最受欢迎的问题:

  

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

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

但这都不能正确执行排序。

我从传奇人物弗兰克·冯·帕芬(Frank von Puffen)那里看到了一篇很棒的文章,但我并不十分了解,所以我想知道是否有人可以帮助我解决这个问题。

这是他的帖子: Ordering Data In FireStore

最好的问候, 鲁斯本

1 个答案:

答案 0 :(得分:1)

  

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

     

日期:“ 2019年9月29日”

     

但这似乎不起作用。

由于您的date属性的类型为String,因此无法使用。在对字符串进行排序时,请记住,对字符串进行排序lexicographically

  

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

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

  

还是我必须将日期存储在Firebase中较长的时间,然后也许将其转换?

这是一种用于订购元素的解决方案,用于实时数据库,而不是用于Cloud Firestore。

  

我从传奇人物弗兰克·冯·帕芬(Frank von Puffen)那里看到了一篇很棒的文章,但我并不十分了解,所以我想知道是否有人可以帮助我解决这个问题。

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