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 中删除集合中的所有文档