我需要使用生成的密钥创建一个新对象并更新其他一些位置,它应该是原子的。是否有某种方法可以使用多位置更新进行推送,还是必须使用旧的事务方法?这适用于任何客户端平台,但这是JavaScript中的一个示例。
var newData = {};
newData['/users/' + uid + '/last_update'] = Firebase.ServerValue.TIMESTAMP;
newData['/notes/' + /* NEW KEY ??? */] = {
user: uid,
...
};
ref.update(newData);
答案 0 :(得分:9)
在Firebase的JavaScript SDK中有两种方法可以调用push
。
使用push(newObject)
。这将生成一个新的推送ID,并在具有该ID的位置写入数据。
使用push()
。这将生成一个新的推送ID并返回对具有该ID的位置的引用。这是纯客户端操作。
了解#2,您可以轻松地获得一个新的推送ID客户端:
var newKey = ref.push().key(); // on newer versions ref.push().key;
然后,您可以在多地点更新中使用此密钥。
答案 1 :(得分:0)
我发布这篇文章是为了节省一些未来的读者和#39;时间。
Frank van Puffelen的回答(很多人都要感谢这个人!)使用key()
,但它应该是key
。
key()
抛出TypeError: ref.push(...).key is not a function
。
另请注意,key
给出了路径的最后一部分,因此您获得它的实际参考值无关紧要。
以下是一个通用示例:
var ref = firebase.database().ref('this/is/irrelevant')
var key1 = ref.push().key // L33TP4THabcabcabcabc
var key2 = ref.push().key // L33TP4THxyzxyzxyzxyz
var updates = {};
updates['path1/'+key1] = 'value1'
updates['path2/'+key2] = 'value2'
ref.update(updates);
会创建这个:
{
'path1':
{
'L33TP4THabcabcabcabc': 'value1'
},
'path2':
{
'L33TP4THxyzxyzxyzxyz': 'value2'
}
}
我是firebase的新手,如果我错了,请纠正我。