Flutter如何对集合中的文档进行排序,其中包含每个文档的编号字段

Posted

技术标签:

【中文标题】Flutter如何对集合中的文档进行排序,其中包含每个文档的编号字段【英文标题】:Flutter How To Sort Documents In Collection With Field Which Numbers Each Document 【发布时间】:2020-07-04 17:50:27 【问题描述】:

我的问题是我们如何对集合中的文档进行排序,当每个文档都有一个名为 "Index" 的字段时,它从 1 到 10。我认为 orderBy("Index", descending: false) 应该对集合中的文档进行排序从1 到 10 按升序排列。这是我的代码,当我调用 orderBy() 时,Cloud Firestore 中文档的显示顺序不正确,并且根本不按任何顺序显示文档,既不是降序也不是升序...感谢您的帮助我真的很感激!

if (petAge >= 42 && petAge <= 56) 
        await petRecordPath.add(
          'Completed': false,
          'Start Due Date': startDateMultiBooster,
          'End Due Date': endDateMultiBooster,
          'Display Range': displayMessageMultiBooster,
          'Importance': 'Vital',
          'Vaccination': 'Puppy Multi Vaccine (DHPP)',
          'Index': 1,
        ).then((value) async 
          await petRecordPath.add(
            'Completed': false,
            'Start Due Date': startDateMultiBooster,
            'End Due Date': endDateMultiBooster,
            'Display Range': displayMessageMultiBooster,
            'Importance': 'Recommended',
            'Vaccination': 'Leptospirosis Vaccine',
            'Index': 2,
          ).then((value) async 
            await petRecordPath.add(
              'Completed': false,
              'Start Due Date': startDateMultiBooster,
              'End Due Date': endDateMultiBooster,
              'Display Range': displayMessageMultiBooster,
              'Importance': 'Recommended',
              'Vaccination': 'Deworm 1',
              'Index': 3,
            );
          );
        ).whenComplete(() 
          petRecordPath.orderBy('Index', descending: false);
        );
      

这是它在 Firebase 控制台中的外观:

第一个文件:

第二份文件:

第三份文件:

最后,使用控制台本身的内置排序功能:

【问题讨论】:

您的代码实际上还没有显示文档中的数据。您能否编辑您的代码以显示您如何阅读文档,并(例如)打印它们的索引值? Firestore 控制台不会自动对文档进行排序。只有当您指定排序顺序(如上一个屏幕截图中)时,它才会按该顺序显示文档。这类似于 API 的工作方式:除非您在阅读文档时指定排序顺序,否则它们将按未定义的顺序检索。 @FrankvanPuffelen 好的,你能告诉我如何以正确的方式阅读这些文档,以便我知道它的排序正确吗? @FrankvanPuffelen 这是指定文档需要添加/显示在控制台上的顺序的正确函数吗??? orderBy 乍一看还不错。但是您的问题并未显示您实际读取数据的方式。如果您编辑您的问题以显示实际阅读内容,例如打印每个文档的索引字段,我们会看看出了什么问题。 【参考方案1】:

Firestore 控制台不会自动对文档进行排序,并且不会受到您的代码发出的 orderBy() 调用的任何影响。事实上,这意味着任何用户都可以进行 API 调用来改变控制台显示数据的方式,这听起来是个坏主意。

仅当您在控制台中指定排序顺序时(如在上一个屏幕截图中),它才会按该顺序显示文档。

这类似于 API 的工作方式:除非您在阅读文档时指定排序顺序,否则它们将按未定义的顺序检索。您的petRecordPath.orderBy('Index', descending: false) 将确保您的代码以指定的顺序读取文档。

【讨论】:

弗兰克,非常感谢,现在我编写了一个函数,它只打印集合中所有文档的疫苗接种名称,并使用了 orderBy() 函数,它现在正在工作,请原谅我我对这个话题缺乏了解!再次感谢!

以上是关于Flutter如何对集合中的文档进行排序,其中包含每个文档的编号字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Flutter 在 Firestore 中删除集合中的所有文档

如何在 MongoDB 中针对其他集合数据进行排序

2018.9.26 如何对List集合中的元素进行排序?

FLUTTER,FIRESTORE:我有一个流构建器,它从集合中的所有文档中返回某个字段..如何添加查询?

如何在 Flutter 中对列表进行排序 [重复]

Flutter如何根据某个值从firebase对列表进行分组