Увеличить значение внутри документа Firebase, используя AngularFire2 @ angular / fire V5 - PullRequest
0 голосов
/ 22 марта 2019

У меня есть документ в Firebase со значением, которое я хочу увеличить, но я не вижу ничего в документации для Angularfire2 о том, как это сделать.

Я пытался использовать этот ответ Создать или увеличить значение с помощью Angular2 / AngularFire2 , но не удалось, поскольку мой экземпляр this.db не распознает метод объекта.

** ОБНОВЛЕНИЕ **

Мне удалось немного заставить мой код делать то, что я хочу, выполнив следующее:

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

Проблема, однако, в том, что я застрял в бесконечном цикле увеличения, потому что каждый раз, когда значение увеличивается, подписка срабатывает и увеличивается снова. Я не знаю, как еще получить значение голоса выбора? Может ли кто-нибудь помочь мне реорганизовать это так, чтобы я мог получить только один объект выбора, используя его ключ, и не быть привязанным к подписке, когда я обновляю значение голосов?

Я понимаю, что можно получить объект, извлекая всю коллекцию, но для моего случая использования я не хочу зависеть от всей коллекции, чтобы получить объект и значение голосования из этого объекта. У меня уже есть ключ объекта.

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Попробуйте:

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

Вот вам Рабочий образец StackBlitz для вашей ссылки.

0 голосов
/ 23 марта 2019

смог заставить его работать со следующими (спасибо @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
      });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...