Polymer 1.x + Firebase 2.x:如何使用 Polymerfire 将数据推送或放入 Firebase?
Polymer 1.x + Firebase 2.x: How to push or put data to Firebase using Polymerfire?
使用 Polymerfire,我想在不覆盖数据的情况下向 Firebase 添加新节点。 (我称之为 push
或 put
行为。)
也就是说。我想从这个开始:
状态A
my-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
类型的方法来将数据插入节点。
我怎样才能做到这一点?
编辑
:
this.$.doc('/emails');
而不是
this.$.doc('/', 'emails');
但这不起作用,因为它添加了一个随机自动密钥,如下所示:
B国
my-app
|
- emails
|
- -hvOxpxwjpWHBYGj-Pzqw
|
+ email3@example,com
+ email4@example,com
注意添加的键:-hvOxpxwjpWHBYGj-Pzqw
从而破坏了数据结构的索引功能。
据我所知,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 有所帮助。如果我错了请纠正我。
我在这里假设电子邮件用作对象的键而不是数组(因为 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>
使用 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
类型的方法来将数据插入节点。
我怎样才能做到这一点?
编辑
this.$.doc('/emails');
而不是
this.$.doc('/', 'emails');
但这不起作用,因为它添加了一个随机自动密钥,如下所示:
B国my-app
|
- emails
|
- -hvOxpxwjpWHBYGj-Pzqw
|
+ email3@example,com
+ email4@example,com
注意添加的键:-hvOxpxwjpWHBYGj-Pzqw
从而破坏了数据结构的索引功能。
据我所知,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 有所帮助。如果我错了请纠正我。
我在这里假设电子邮件用作对象的键而不是数组(因为 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>