在实时DB Firebase中存储数据的正确结构

时间:2018-07-31 06:45:51

标签: node.js firebase firebase-realtime-database firebase-admin

我有一个移动应用程序,用户可以在该应用程序上注册mobile_number。成功注册一个用户后,应用程序会要求从用户访问联系人目录权限。用户授予所需的权限后,我将用户的联系电话存储到Firebase数据库中。

以后如果有新用户注册,我想查看他的哪些联系人已经在我的应用程序中注册,并向他们发送应用内通知,如下所示:

  

您的朋友/联系人ABC已在XYZ应用程序中注册,欢迎他/她。

我目前正在以以下格式将数据存储在Firebase实时数据库中。

contacts/"+registeredUserMobileNo+"/contacts/"+UserContactNumber1);

contacts/"+registeredUserMobileNo+"/contacts/"+UserContactNumber2);

如何使用当前数据检查他的联系人中有多少已经在我的应用程序中注册?

我可以创建更好的数据库结构吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我建议您对数据进行非规范化并创建两个不同的节点:

第一个节点就是您在帖子中提到的节点:

- contacts
   - registerUserId1
       - userContacts
           - userContactNumber1: true
           - UserContactNumber2: true
   - registerUserId2
       - userContacts
           - userContactNumber3: true
           - userContactNumber4: true
           - UserContactNumber2: true

第二个节点将包含UserContactNumber的列表(即联系人目录中的列表),这样,当这些UserContactNumber中的一个变为一个时,您可以轻松获取需要向其发送警报的用户。应用程序的用户。如下所示:

- userContactNumbers
   - userContactNumber1
       - registerUserId1: true
   - userContactNumber2
       - registerUserId1: true
       - registerUserId2: true
   - userContactNumber3
       - registerUserId1: true
   - userContactNumber4
       - registerUserId1: true

然后,当新用户注册时,只需查询userContactNumbers节点以查看它是否包含新用户号,如果是这种情况,则将警报相应地发送到数字列表。

为了使这两个节点保持同步,您应该使用update()方法,如文档中的here所述。