Flutter / Firestore - Как запустить обновление транзакции для поля внутри массива документа - PullRequest
0 голосов
/ 30 сентября 2019

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

Вот как структурирован мой документ «викторина»:

{
  title: '123',
  questions: [
    {
      title: 'question1',
      answers: [
        {
          title: 'answer1',
          votes: 0
        }
      ]
    }
  ]
}

А воткод, с которым я работаю, который завершается с ошибкой в ​​«await tx.update ...», потому что я передаю строковый путь «questions [0] .answers [0] .votes». Это вообще возможно? Или мне нужно вытащить весь документ, обновить значение и заменить его?

final DocumentReference postRef = Firestore.instance.document('quizes/' + id);
Firestore.instance.runTransaction((Transaction tx) async {
  DocumentSnapshot postSnapshot = await tx.get(postRef);
  if (postSnapshot.exists) {
    await tx.update(postRef, <String, dynamic>{'questions[0].answers[0].votes': postSnapshot.data['questions'][0]["answers"][0]["votes"] + 1});
  }
}); 

1 Ответ

0 голосов
/ 14 октября 2019

Это вообще возможно? Или мне нужно вытащить весь документ, обновить значение и заменить его?

Чтобы обновить поля внутри массива в Firestore, вы должны получить массив, обновить нужные поля, а затемобновить документ. Вы можете использовать транзакции для этого. Ниже вы найдете некоторые подробности о транзакциях .

Дайте мне знать, если это было полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...