【问题标题】:Flutter cloud firestore : query document->map->arrayFlutter cloud firestore:查询文档->地图->数组
【发布时间】:2021-09-19 10:39:10
【问题描述】:

我的数据库设计如上图。我想创建一个查询,它返回标签匹配的用户。但我没有任何解决方案来查询。

这是我的颤振代码:

但它不起作用。如何查询文档地图数组?

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    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。在这种情况下,您可以将包含所有课程标签的字段存储在用户文档的单个数组字段中。

    【讨论】:

    • 我需要用户信息才能在列表中显示课程。如果我将新集合创建为“课程”并根据标签列表搜索课程,那么我是否需要创建查询以获取拥有该课程的用户?
    • @emiled 如果要查询有特定课程的用户,最好存储一个数组course_tags,其中包含用户所有课程的标签。
    猜你喜欢
    • 2020-07-02
    • 2019-10-18
    • 2021-05-11
    • 2019-09-03
    • 2020-11-08
    • 1970-01-01
    • 2018-12-20
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多