使用AngularFire2 @ angular / fire V5在Firebase文档中增加一个值

时间:2019-03-22 17:21:11

标签: angular firebase angularfire2

我在Firebase中有一个文档,该文档的值要增加,但是在Angularfire2的文档中没有看到有关执行此操作的任何信息。

我尝试使用此答案Create or increment a value with Angular2/AngularFire2,但由于我的this.db实例无法识别对象方法而失败。

**更新**

通过执行以下操作,我可以使我的代码做我想做的事情:

incrementChoice(choiceKey) {
    this.db.doc(choiceKey).valueChanges().subscribe((choice:any) => {
      this.db.doc(`choices/${choiceKey}`)
        .update({
          votes: ++choice.votes
        });
    })
  }

但是,问题在于我现在陷入了无限的递增循环中,因为每次值递增时,订阅都将启动并再次递增。我不知道如何获得选择票价值?有人可以帮助我重构此内容,以便在更新投票的值时仅使用其键值获得一个选择对象,而不受绑定限制吗?

我知道可以通过获取整个集合来获取对象,但是对于我的用例,我不想依赖于整个集合来获取对象并从该对象中投票。我已经有了对象Key。

2 个答案:

答案 0 :(得分:1)

尝试一下:

this.afs.doc(`choices/${choice.key}`)
  .update({
    votes: ++choice.votes
  });

  

这是您推荐的Working Sample StackBlitz

答案 1 :(得分:0)

能够在以下环境下工作(感谢@SiddAjmera帮助我走上正确的道路):

  incrementChoice(choiceKey) {
    const choiceDoc:any = this.db.collection('choices').doc(choiceKey);
    choiceDoc.ref.get().then(choice => {
      let votes = choice.data().votes
      choiceDoc.update({
        votes: ++votes
      });
    });