Javascript Firebase-无法嵌套集合的集合

Javascript Firebase-无法嵌套集合的集合,javascript,firebase,react-native,google-cloud-firestore,Javascript,Firebase,React Native,Google Cloud Firestore,在我的React原生项目中,我使用Firestore作为我的数据库。每当用户注册时,我都要创建主管批准请求 基本上,在主管请求的集合下,每个主管都应该有一个文档,以主管的密钥命名。在supervisor文档下,我希望有一个随机生成的ID集合,每个ID都保存请求元数据。以下是我想要的结构: -supervisorRequests -supervisor-1-Key -random-id-of-request - user: userID

在我的React原生项目中,我使用Firestore作为我的数据库。每当用户注册时,我都要创建主管批准请求

基本上,在
主管请求的集合下,每个
主管都应该有一个文档,以主管的密钥命名。在supervisor文档下,我希望有一个随机生成的ID集合,每个ID都保存请求元数据。以下是我想要的结构:

-supervisorRequests
      -supervisor-1-Key
           -random-id-of-request
              - user: userID
              - userEmail: userEmail
              - requestDate: timestamp
           -random-id-of-request
              - user: userID
              - userEmail: userEmail
              - requestDate: timestamp
      -supervisor-2-Key
           -random-id-of-request
              - user: userID
              - userEmail: userEmail
              - requestDate: timestamp
           -random-id-of-request
              - user: userID
              - userEmail: userEmail
              - requestDate: timestamp
           -random-id-of-request
              - user: userID
              - userEmail: userEmail
              - requestDate: timestamp
我试图实现这一点的代码是:

const docReference = firebase.firestore().collection(`supervisorRequests`).doc(this.props.supervisorKey);
docReference.set({ user: this.props.userUID, requestDate: new Date().getTime(), userEmail: this.props.email });
但是,我的代码生成以下结构:

-supervisorRequests
      -supervisor-1-Key
          - user: userID
          - userEmail: userEmail
          - requestDate: timestamp
这不是我想要的,因为每次对主管的密钥发出新请求时,旧请求都会被覆盖


我的代码有什么问题,如何实现我介绍的第一个数据库结构?

传递给collection()的字符串必须是指向集合的路径。您现在传递的是文档的路径。它通过查看字符串中的正斜杠来识别这一点。也许您希望像这样引用文档:

firebase.firestore()
        .collection('supervisorRequests')
        .doc(this.props.supervisorKey)

您可以使用返回的DocumentReference及其set()方法创建文档。

为了完成Doug的回答,请注意,您可以直接将“斜杠分隔路径”传递给该方法,以获得“在指定路径引用文档的实例”

所以你也可以做:

firebase.firestore().doc(`supervisorRequests/${this.props.supervisorKey}`).set();

我刚刚又试了一遍你的代码。您的解决方案不会在this.props.supervisorKey
中创建具有随机ID的新节点。它只是用一个新对象更新旧对象。如何添加具有新随机id的对象?正如我在回答中所说的,代码返回一个DocumentReference,然后使用它的set()方法创建文档。要么我没有正确执行您建议我执行的操作,要么您误解了我所需的输出。我更新了上面的问题,介绍了我想要的结构以及当前代码生成的内容。你能再看一眼吗?非常感谢。如果您试图在其他集合中立即创建集合,则这是不可能的。子集合必须有父文档id。哦,这真是不幸。那么,你能建议我在这种特殊情况下如何构建数据结构吗?做这件事的最佳方式是什么?