我在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。
答案 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
});
});