【发布时间】:2021-09-19 10:39:10
【问题描述】:
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore
courses 是一个数组而不是一个映射,因此您不能使用dot notation 进行查询。如果将 courses 单独设为 collection(或子集合),那么您将能够轻松地查询用户:
users -> {userId}
(col) (doc)
courses -> {courseId}
(col) (doc)
您必须在每个课程文档中包含一个字段userId,用于识别哪个用户拥有该课程。
await firestore.collection("courses").where("tags", arrayContainsAny: tagKeys)
这将返回标签数组包含tagKeys 列表中至少一项的所有课程。如果您需要完全匹配,即 tagKeys 中的所有标签必须存在于 Firestore 文档中,那么您必须按照 this answer 中的说明重新构建数据库。
获取所有匹配的文档可能并不理想,因为您只需要与标签匹配的用户 ID。在这种情况下,您可以将包含所有课程标签的字段存储在用户文档的单个数组字段中。
【讨论】:
course_tags,其中包含用户所有课程的标签。