首页 > 解决方案 > 如何消除额外的uid出现在firebase push中

问题描述

我目前对我的 firebase 数据库有以下推送查询。

setVisitorAttendanceDate = (orgId, attendeeUid, date) => this.db.ref(`organization/${orgId}/visitor-attendance/${date}`).push({[attendeeUid]: true});

这将创建以下内容:

- visitor-attendance
- 2020-11-30-PM
-MNSIxmbzLwlW5Dq83Ws
-MNSIxm_woAnBAkVQWRV: true

它按预期添加日期,但添加了一个额外的 UID。

在它为对象添加此 uid 的日期之后:

-MNSIxmbzLwlW5Dq83Ws

如果没有那个 UID,我怎么能做到这一点?所以这

- visitor-attendance
- 2020-11-30-PM
-MNSIxm_woAnBAkVQWRV: true

标签: javascriptfirebasefirebase-realtime-database

解决方案


请记住,实时数据库中的所有内容都是键:值对。当定义了路径并且您 .push 在该路径中时,将创建一个具有子键:值对的节点,该节点位于该路径的“下方”。

如果您查看代码,您实际上是在定义数据的路径,其中最后一个组件是date

this.db.ref(`organization/${orgId}/visitor-attendance/${date}`).push({[attendeeUid]: true});
                                                         ^^^ path          ^^^ key   ^^^ value

路径是

organization
   orgId
      visitor-attendance
         date
           the pushID
               MNSIxm_woAnBAkVQWRV: true

来自Firebase 文档

每次将新子项添加到指定的 Firebase 引用时,push() 方法都会生成一个唯一键。

一种可能的解决方法是使用 .set 如指南中所示

对于基本的写入操作,您可以使用 set() 将数据保存到指定的引用,替换该路径中的任何现有数据。

firebase.database().ref('users/' + userId).set({
    username: name,
    email: email,
    profile_picture : imageUrl
  });

推荐阅读