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

Firebase: Can I combine a push with a multi-location update?

我需要用生成的键创建一个新对象并更新一些其他位置,它应该是原子的。有什么方法可以通过多位置更新进行推送,还是我必须使用旧的事务方法?这适用于任何客户端平台,但这里是 JavaScript.

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

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

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

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

知道#2,你可以很容易地得到一个新的推送id客户端:

var newKey = ref.push().key(); // on newer versions ref.push().key;

然后您可以在多位置更新中使用此密钥。

我发布这篇文章是为了节省未来读者的一些时间。

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新手,如有错误请指正。