【问题标题】:How to create an Auto-ID inside a firestore document?如何在 Firestore 文档中创建 Auto-ID?
【发布时间】:2019-11-01 16:07:39
【问题描述】:

我正在尝试在我的数据结构中为已发送请求的好友请求功能实现此功能,但我无法:

基本上,我正在尝试从 Cloud Firestore 中的实时数据库中解决这个问题: 以上reqId1和reqId2都是自动生成的Id。 在实时数据库中很容易做到这一点,因为我可以使用push() method。 问题不是创建一个随机数,而是我无法在 userId 文档中创建一个带有 autoID 的文档,我将在其中存储数据。

我试过这个:

sendRequest() {
    const uid = auth().currentUser.uid;
    firestore()
      .collection('Sent_Reqs')
      .doc(`${uid}`)
      .collection(`${this.autoId()}`)
      .add({
        targetId: this.userId,
        sentAt: new Date(),
      });
  }

但是上面没有任何好处,因为它将数据嵌套在文档(uid)中的两个级别。

请帮帮我

谢谢

【问题讨论】:

  • @hongdevelop 这并不能解决我在文档(userId)中创建具有 AutoID 的文档的问题
  • 您不能在文档中创建文档。您可以更新您的问题以包含您尝试过的代码吗?如果我们看到您遇到的实际代码,我们更有可能提供帮助。
  • @FrankvanPuffelen 我已经编辑了问题
  • 你是说要生成一个随机的子集合名称吗?这似乎没有帮助。

标签: javascript firebase react-native google-cloud-firestore


【解决方案1】:

Firestore 上的数据结构总是成对的collection,然后是document。集合名称通常是固定/硬编码的名称,而文档名称通常是生成的(或基于数据)。

您不能立即将文档嵌套在另一个文档下,它们必须始终位于命名集合中。如果您没有理由拥有多个子集合,您可以选择任何对您有意义的子集合名称。

例如:

Sent_Requests
  (uid)
    Requests
      (request_id)

这里Sent_RequestsRequests 是集合名称,(uid)(request_id) 是文档名称。 Requests 集合并不是很有帮助,但需要满足 Firebase 要求。

【讨论】:

    【解决方案2】:

    它是您文档数据的一部分。我不知道这个火力基地可以帮助你。

    如果您以这种方式构建数据库只是为了轻松获取特定用户发送的请求。我想建议另一种结构如下:

    Sent_Request (collection)
    |-AutoID1 (document, this ID you can generate with help of firebase)
      |- targetUser : value
      |- sentAt : value
      |- requestSentBy : userId
    |-AutoID2 (document, this ID you can generate with help of firebase)
      |- targetUser : value
      |- sentAt : value
      |- requestSentBy : userId    
    

    【讨论】:

    • 我想到了这个,但是如果我必须检索特定用户的发送请求,这不会减慢查询速度吗??
    • 不,不会的。所有第一级数据都由火力库编制索引。所以这种结构不会影响查询性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2020-12-10
    • 2019-02-19
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多