如何从firestore中检索swiftUI中的预定义项目列表?

Posted

技术标签:

【中文标题】如何从firestore中检索swiftUI中的预定义项目列表?【英文标题】:How to retrive predefined list of items in swiftUI from firestore? 【发布时间】:2021-07-26 12:46:43 【问题描述】:

我有两种类型的集合:

    类 学生

每个班级可以有多个学生,反之亦然。

存储和获取班级中所有学生的最佳方式是什么(或相反)?


这是一个类的快照:


到目前为止,我所做的是为每个项目设置一个数组类型的字段,该字段应包含学生/班级的 ID 列表。但是使用 whereField 来检索学生并不好,因为它仅限于 10 个。此外,出于某种原因,即使我为一个班级提取 9 名学生,当我更改 Firestore 中的数据时,它也不会实时反映变化,所以我怀疑有更好的方法来做到这一点。

我还尝试获取所有学生并在此列表上循环针对类列表并将其附加到一个新数组中 - 但这效果很差,而且我怀疑这是无用的开销。

有适合​​我需要的好的做法吗?

【问题讨论】:

“获取班级中的所有学生”您能否分享您的 Firestore 文档的屏幕截图并展示您如何将学生的班级存储在他们的文档中? 好的,我已经添加到原帖中了 请提供一些代码。你尝试了什么。你得到了什么错误? Minimal example Guide 但这就是问题所在,我的代码有点工作,但我不想修复我所做的,而是了解如何通过从 Firestore 的 ID 列表获取文档的好方法,因为由于 10 个文档的限制,直接的方法 (whereField) 并不好。 【参考方案1】:

如果有人会为此寻求解决方案 - 这是我采用和工作的方法。

我的第一个(复杂且不太好的)方法是:

    从班级中获取学生数组 根据学生数组从学生集合中获取学生 (*如果数组中有超过 10 个项目,这将不起作用) 如果您有超过 10 个项目,请获取所有学生,在学生数组中循环,然后过滤掉不在数组中的学生。

行之有效的方法:

    为班级中的每个学生添加班级ID

    获取所有学生并使用 whereField 按班级 ID 过滤

    .whereField("students", arrayContains: classID)

这是所有内容的图表:

【讨论】:

以上是关于如何从firestore中检索swiftUI中的预定义项目列表?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI+Firestore 中的多选列表

如何使用 SwiftUI 将值数组写入 Firestore

如何使用 Flutter 中的 UserID 从 Firebase Firestore 检索数据?

swiftUI 中的选取器正在从 Firestore 中选择文档 ID 而不是文档字段

如何从 Cloud Firestore 上的对象中检索值?迅速

SwiftUI + Firestore - 基于从 Firestore 返回的数组的过滤器列表