Android 如何查询Firestore子文档

Android 如何查询Firestore子文档,android,firebase,dart,flutter,google-cloud-firestore,Android,Firebase,Dart,Flutter,Google Cloud Firestore,我正在开发一个应用程序,我想查询Firestore子文档。让我进一步解释 我有一个汽车存放的文档集合,每个文档都有一个特定的汽车描述 在上面的每个文档中,我都有一个名为user\u data的子集合,它有自己的文档,其中存储了将汽车添加到其愿望列表的用户的特定用户ID 现在,如果用户ID存在于其子集合中,我想获取cars的文档。简而言之,我想得到一个特定用户的愿望列表。 我正在将streambuilder与listviewbuilder一起使用,但问题是如何执行此查询 或者有更简单的方法吗?目前

我正在开发一个应用程序,我想查询Firestore子文档。让我进一步解释

  • 我有一个汽车存放的文档集合,每个文档都有一个特定的汽车描述
  • 在上面的每个文档中,我都有一个名为
    user\u data
    的子集合,它有自己的文档,其中存储了将汽车添加到其愿望列表的用户的特定用户ID
  • 现在,如果用户ID存在于其子集合中,我想获取cars的文档。简而言之,我想得到一个特定用户的愿望列表。 我正在将streambuilder与listviewbuilder一起使用,但问题是如何执行此查询


    或者有更简单的方法吗?

    目前Firebase Cloud Firestore不支持使用子集合进行查询。您可能必须以可以查询的方式构造数据库

    • 将userid存储在car文档的数组中
    • 使用单独的集合来保持用户和车辆之间的连接
    您可以从Firebase签出此视频


    Firestore中的查询很浅,这意味着它们只从运行查询所针对的集合中获取项目。无法在单个查询中从顶级集合和其他集合或子集合获取文档。Firestore不支持一步跨不同集合进行查询。因此,无法基于子集合中存在的项从集合中获取项。单个查询只能使用单个集合中文档的属性

    简而言之,我想得到一个特定用户的愿望列表

    因此,我能想到的最简单的解决方案是在每个用户对象下添加一组喜爱的汽车。您的新数据库结构应类似于以下内容:

    Firestore-root
        |
        --- users
              |
              --- uid
                   |
                   --- favoriteCars : ["carId", "carId"]
    

    通过这种方式,您可以查询您的数据库,只获取用户标记为最喜爱的汽车。您还可以存储实际的汽车对象,而不是数组中的ID。请参阅有关优缺点的更多详细信息。

    我如何使用单独的集合来保持用户和CARSPL之间的连接我正在使用Flatter开发应用程序,如何将其与streambuilder结合起来。你能给我一段代码吗?我正在考虑使用文档引用和u提供的数据结构,将每个喜爱的汽车引用到其来自汽车收藏的原始文档是的,这是一个好主意。在这种情况下,根据答案中的信息,你应该自己尝试,如果出现其他问题,你应该问另一个问题。