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

时间:2020-07-04 17:50:27

标签: firebase flutter dart google-cloud-firestore

我的问题是,当每个文档都有一个名为"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控制台中的外观:

第一个文档:

enter image description here

第二个文档:

enter image description here

第三文档:

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

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