我的用例是我有<iron-form>
个单<paper-textarea>
字段,它接受我解析成数组的电子邮件地址的字符串列表,然后我想:
具体来说,我想从A国开始,如下:
州Amy-app
|
- emails
| |
| - email1@example,com
| |- old: "data"
| - email2@example,com
| |- old: "data"
- users
|
- c0djhbQi6vc4YMB-fDgJ
实现B国如下:
B国my-app
|
- emails
| |
| - email1@example,com
| |- old: "data"
| - email2@example,com
| |- old: "data"
| - email3@example,com
| |- new: "data"
| - email4@example,com
| |- new: "data"
- users
|
- c0djhbQi6vc4YMB-fDgJ
|
- emails
|
- email3@example,com
|- new: "data"
- email4@example,com
|- new: "data"
注意:{old: "data"}
不会被覆盖。
I seek to extend this SO question and answer
在那里,我们在一个新位置插入了一个节点,其中有三个选项:
firebase-query
firebase-document
现在,我需要为多个节点执行相同类型的插入(不删除或替换旧数据)(使用用户定义,而不是自动生成密钥;即,密钥是特定的电子邮件地址)。我还需要使用数据扇出技术,通过一次写操作来更新多个路径。
https://firebase.google.com/docs/database/web/read-and-write#update_specific_fieldsfunction writeNewPost(uid, username, picture, title, body) {
// A post entry.
var postData = {
author: username,
uid: uid,
body: body,
title: title,
starCount: 0,
authorPic: picture
};
// Get a key for a new Post.
var newPostKey = firebase.database().ref().child('posts').push().key;
// * * * * * * * * * * * * * * * *
// THE ABOVE LINE NEEDS TO CHANGE TO SUPPORT USER-GENERATED KEYS SUCH AS EMAIL ADDRESSES
// * * * * * * * * * * * * * * * *
// Write the new post's data simultaneously in the posts list and the user's post list.
var updates = {};
updates['/posts/' + newPostKey] = postData;
updates['/user-posts/' + uid + '/' + newPostKey] = postData;
return firebase.database().ref().update(updates);
}
另请注意,其中一条评论提及:
以上
newPostKey
无法成为电子邮件地址......
挑战在于我需要在一次通话中同时将多个密钥写入多个位置。
答案 0 :(得分:3)
Firebase实时数据库支持任意复杂的原子深度更新(blog post)。它的工作原理如下:
.update()
电话让我们举个例子:
var update = {};
update['emails/email3@example,com'] = {new: 'data'};
update['emails/email4@example,com'] = {new: 'data'};
update['users/c0djhbQi6vc4YMB-fDgJ/emails/email3@example,com'] = {new: 'data'};
update['users/c0djhbQi6vc4YMB-fDgJ/emails/email4@example,com'] = {new: 'data'};
firebase.database().ref().update(update);
这将同时更新所有位置。要使其动态化,只需在构造键时使用字符串插值。