【问题标题】:How do i structure firestore database in flutter to easily access other collections related to the user?如何在 Flutter 中构建 Firestore 数据库以轻松访问与用户相关的其他集合?
【发布时间】:2019-11-04 21:43:39
【问题描述】:

我有一个 Firestore 数据库,但现在它只有一个用户集合,文档被命名为他们注册时使用的唯一用户的电子邮件,然后在文档内部是其他信息。

用于显示用户的个人资料或编辑个人资料的工作正常。但是,现在我开始添加更多功能,我想知道构建数据的最佳方式是什么。例如,我创建了一个名为 requests 的集合,基本上用户可以向某些人请求资金,或者他们欠其他用户的钱。

那么如何将 requests 集合连接到 users 集合?我是否应该在用户文档中包含一个名为 requests 的字段,并通过他们的文档 ID 列出所有请求?这是合理的还是有效的?有没有一种方法可以在我的代码中循环遍历用户文档中的请求列表,然后通过搜索特定的文档 ID 来访问请求集合中的信息?关于哪种方法是构建此代码的最有效方法以及如何访问特定于用户的集合中的信息的任何想法?此问题适用于我添加的任何其他功能,例如聊天系统。

【问题讨论】:

    标签: flutter dart google-cloud-firestore nosql


    【解决方案1】:

    我有一个 firestore 数据库,但现在它只有一个用户集合,文档被命名为唯一用户的电子邮件

    通常我们使用来自身份验证过程的uid 作为用户的文档 ID,而不是电子邮件地址。原因很简单,用户可以更改电子邮件地址,而uid 将始终保持不变。除此之外,文档的 id 不能更改,除非您重新创建整个文档。

    那么如何将 requests 集合连接到 users 集合?

    通常通过uid

    我应该在用户文档中包含一个名为 requests 的字段,并通过他们的文档 ID 列出所有请求吗?

    是的,您可以这样做,或者您可以简单地复制数据。您可以在用户对象中添加一个新集合,该集合可以保存用户的所有请求。

    这是否合理或有效?

    这个问题无法回答,因为我们不知道您的应用的用例是什么以及您的文档多久会更改一次。我在下面回答了一个类似的问题:

    有没有一种方法可以在我的代码中循环遍历用户文档中的请求列表,然后通过搜索特定的文档 ID 来访问请求集合中的信息?

    是的,但请注意,Firestore 中的所有内容都与读写次数有关。因此,请以这样的方式进行所有操作,即您可以进行大量读写操作,同时拥有非常好的功能。

    关于哪种是构建此代码的最有效方式以及如何访问特定于用户的集合中的信息的任何想法?

    这又是关于我在上面的帖子中已经回答的内容。

    【讨论】:

    • 好的 UID 部分而不是电子邮件是有意义的,我试着做出改变。但是你说我通过uid连接集合。所以这意味着在请求集合中,我应该在收件人而不是他们的名字下,我将拥有他们的 uid,与从字段中请求的相同?此外,我在 firebase 文档上读到,如果可能的话,我应该避免嵌套数据,这就是为什么我想通过用户集合中的文档 ID 创建请求字段,而不是在其中嵌套另一个集合。我的理解正确吗?我正在做的是在其他集合中创建对访问的引用
    • 在 NoSQL 世界中,扁平化数据始终是一种好方法,但 Firestore 允许您拥有 nested collections up to 100。因此,如果您只使用两个,则根本不是问题。因此,持有引用或嵌套集合是您自己的决定,因此您可以执行简单的查询。
    • 如果我要将集合嵌套在用户集合中,是否有一个单独的重复请求集合?此外,当我尝试从用户集合中获取请求文档 ID 列表时,我收到一条错误消息,提示该列表为空? requests = datasnapshot.data['requests']; 是我用来获取列表的,这是错的吗?
    • 如果您的查询需要,您可以有一个单独的集合。没有看到你的代码,我不能说为什么你的请求是空的。为此,请使用 MCVE 发布另一个新问题,以便我和其他 Firebase 开发人员可以帮助您。
    • 我一切正常,但是我读过firestores subcollection is subpar 因为不可能或很难查询子集合中的特定信息,例如,如果您有一个用户集合和一个嵌套集合朋友,然后是他们的文档,其中包含他们的姓名等数据,因此不可能查询具有给定姓名的所有朋友。我最终使用了一个子集合来处理请求,因为文档引用的另一种方式给我带来了一些问题,你对此有何看法
    猜你喜欢
    • 2020-10-21
    • 2022-07-31
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2016-06-04
    • 2012-10-30
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多