Firebase-无法嵌套收藏集

时间:2019-04-03 22:09:51

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

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

基本上,在function getSubArrayCount(a,sum) { let r=0, sub= (a,n)=> a.filter((x,i)=> n&(1<<i)); for(let i=0; i<2**a.length; i++) sub(a,i).reduce((s,c)=>s+c,0)==sum ? r++ : 0; return r; } console.log('[1,2,3,2,1,8,-3] sum=5 => ', getSubArrayCount([1,2,3,2,1,8,-3],5) ); console.log('[1,2,3,4] sum=10 => ', getSubArrayCount([1,2,3,4],10) ); console.log('[1,2,3,-3] sum=3 => ', getSubArrayCount([1,2,3,-3],3) );的集合下,每个supervisorRequests都应有一个文档,并以主管的密钥命名。在主管文档下,我想要一个随机生成的ID集合,每个ID都保存请求元数据。这是我想要的结构:

supervisor

我试图实现这一目标的代码是:

-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 });

这不是我想要的,因为每次对主管的密钥提出新请求时,旧请求都会被覆盖。

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

2 个答案:

答案 0 :(得分:1)

您传递给collection()的字符串必须是集合的路径。您现在传递的是文档的路径。它通过查看字符串中的正斜杠来辨别。也许您想参考这样的文档:

['apple://folderx/folderz/source_b_20190324-0.json', 'apple://folderx/folderz/source_c_20190324-0.json', 'apple://folderx/folderz/source_b_20190326-0.json']

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

答案 1 :(得分:0)

仅需完成Doug的答案,请注意,您可以直接将“斜杠分隔的路径”传递给doc()方法,以获取“ DocumentReference”实例,该实例引用文档中的指定的路径”。

所以您也可以这样做:

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