使用Polymerfire,我想在不覆盖数据的情况下向Firebase添加新节点。 (我称之为push
或put
行为。)
换句话说。我想从这开始:
州Amy-app
|
- emails
|
+ email1@example,com
+ email2@example,com
完成这个。
B国my-app
|
- emails
|
+ email1@example,com
+ email2@example,com
+ email3@example,com
+ email4@example,com
但是,当我从州A开始并执行此操作时:
<firebase-document
id="doc"
app-name="app"
data="{{data}}">
</firebase-document>
...
this.$.doc.save('/', 'emails');
我结束了这个:
B国my-app
|
- emails
|
+ email3@example,com
+ email4@example,com
请注意起始数据:email1@example,com
和email2@example,com
已删除。
Here is the Polymerfire documentation。但它没有提到如何完成这种类型的push
或put
- 类型方法来将数据插入节点。
我该如何做到这一点?
The answer by @motss suggests:
this.$.doc('/emails');
而不是
this.$.doc('/', 'emails');
但这不起作用,因为它添加了一个随机自动键,如下所示:
B国my-app
|
- emails
|
- -hvOxpxwjpWHBYGj-Pzqw
|
+ email3@example,com
+ email4@example,com
注意添加的密钥:-hvOxpxwjpWHBYGj-Pzqw
从而破坏了数据结构的索引功能。
答案 0 :(得分:4)
我将在这里假设电子邮件用作对象的键,而不是数组(因为您不能在Firebase实时数据库中拥有数组)。如果是这种情况,您可能需要以下内容:
<firebase-query
id="emails"
app-name="my-app"
path="/emails"
data="{{emails}}">
</firebase-query>
<script>
// ...
this.$.emails.ref.child('email3@example,com').set({new: 'data'});
// ...
</script>
如果您不想实际查询电子邮件但只是想插入数据,那么使用JS SDK也很容易:
firebase.database().ref('emails').child('email3@example,com').set({new: 'data'});
对于第三个选项,您可以将<firebase-document>
与路径一起使用:
<firebase-document
app-name="my-app"
path="/emails/[[emailKey]]"
data="{{emailData}}">
</firebase-document>
<script>
// ...
this.emailKey = 'email3@example,com';
this.emailData = {new: 'data'};
// ...
</script>
答案 1 :(得分:1)
据我所知,save
方法在两个方面做了不同的事情:
set
新数据转移到当前位置。push
新数据转移到当前位置。为了push
新数据,您必须在key
方法中不提交save
作为第二个参数:
// This will push new data into the location /emails.
this.$.doc('/emails');
// To set new data (replacing) at location /emails.
this.$.doc('/', 'emails');
希望这有助于IIRC。如果我错了,请纠正我。