【问题标题】:Firebase / Firestore / Angular: How do I create subcollections within documents?Firebase / Firestore / Angular:如何在文档中创建子集合?
【发布时间】:2021-02-20 22:08:20
【问题描述】:

我的 Angular Web 应用在 Firebase 中有一个 Firestore 数据库。现在我正在尝试在我的集合“用户”中创建新文档。我知道如何创建这些,但只能使用简单的字段(“邮件、昵称和用户 ID”)。我还想在此文档中添加一个子集合“路由”,但我不知道如何。这个子集合中会有文档。

这是我在 Firebase 中的数据库的照片: https://i.stack.imgur.com/3nZMn.png

这是我用来在这个数据库中创建一个新用户的函数。它正在工作,但缺少子集合。

  create_new_User(docID, email, nickname, userID) {
    return this.fireservices.collection('users').doc(docID).set({
      mail: email,
      nickname: nickname,
      userID: userID
    });
  }

有人想解决这个问题吗?

【问题讨论】:

    标签: angular firebase google-cloud-firestore collections


    【解决方案1】:

    我个人会让用户集合的 docId 与实际的 userId 相同,但您不必这样做。您一次只能创建一个文档,因此您需要批量处理或在 2 个单独的文档写入中运行它们。例如,您可以在没有批次的情况下执行此类操作:

    create_new_User(userId, email, nickname, routeId, routeParams) {
    
     this.fireservices.collection('users').doc(userId).set({
              mail: email,
              nickname: nickname,
              userID: userID
            })
                this.fireservices.collection('users').doc(userId).collection('routes').doc(routeId).set({ routeParams })
      }
    

    【讨论】:

    • 谢谢大卫。在您的提示之后,我阅读了有关这批写入的信息。很高兴结束我的交易,但批处理中的每个操作都将分别计入我的 Firestore 使用量。所以通常情况下,在我的情况下,批量处理应该没有优势。我对吗? firebase.google.com/docs/firestore/manage-data/transactions
    • 在这两种情况下,它都将计为 2 次写入 Firestore 使用。我相信如果将它们批处理在一起,性能会更好,但是,您最终会得到相同的结果。批处理的缺点是您没有机会在两次写入之间读取文档。在这种情况下,这无关紧要,因为您自己正在分配文档 ID,但是如果您要首先添加一个用户文档,并且您想在两者之间读取新创建的文档 ID,则您不会批处理并将它们作为单独的操作来执行。
    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2019-06-08
    • 2020-04-07
    相关资源
    最近更新 更多