Firebase:我可以将推送与多位置更新结合使用吗?

时间:2016-04-21 15:27:58

标签: javascript firebase firebase-realtime-database

我需要使用生成的密钥创建一个新对象并更新其他一些位置,它应该是原子的。是否有某种方法可以使用多位置更新进行推送,还是必须使用旧的事务方法?这适用于任何客户端平台,但这是JavaScript中的一个示例。

var newData = {};
newData['/users/' + uid + '/last_update'] = Firebase.ServerValue.TIMESTAMP;
newData['/notes/' + /* NEW KEY ??? */] = {
  user: uid,
  ...
};
ref.update(newData);

2 个答案:

答案 0 :(得分:9)

在Firebase的JavaScript SDK中有两种方法可以调用push

  1. 使用push(newObject)。这将生成一个新的推送ID,并在具有该ID的位置写入数据。

  2. 使用push()。这将生成一个新的推送ID并返回对具有该ID的位置的引用。这是纯客户端操作

  3. 了解#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的新手,如果我错了,请纠正我。