在我的应用中,用户可以创建新的作业并在他们自己的UID下注册。
let newJobRef = firebase.database().ref(`/jobs/serviceUsers/activeJobs/${currentUser.uid}`);
newJobRef.push(job)
我知道在promise解决后,你得到的快照对象的推送密钥存储为snapshot.key
,如下所示:
.then(snapshot => {
let myPushKey = snapshot.key;
// do more stuff here
}
但是,在我的应用程序中将此键存储在Job对象本身中非常重要。因此,我必须进行第二次往返并更新最近推送的作业,以将按键添加到其中,作为键值对。
我的问题是:这是正确的方法吗?有没有其他方法可以在单程旅行中将按键添加到对象? (不包括云功能)。我希望有一些保留的firebase语法或单词,当它击中数据库时会自动执行此操作,但却什么也没找到。
非常感谢你!
答案 0 :(得分:2)
一旦您意识到push()
也可以在没有值的情况下调用,这很容易做到:
let userRef = firebase.database().ref(`/jobs/serviceUsers/activeJobs/${currentUser.uid}`);
let newJobRef = userRef.push();
job.key = newJobRef.key;
newJobRef.set(job);
对push()
的调用是一个纯客户端调用,它只是生成一个具有唯一ID的引用。对set()
的调用是在此处将值写入数据库的调用。
请注意,将对象的键存储在该对象中是一种反模式。虽然通常需要在程序中同时具有键和值,但我通常通过传递快照(已经有.key
和.val()
)或通过将键注入到对象中来实现。阅读(而不是在数据库本身)。