Flutter / Firestore-如何在文档数组内的字段上运行事务更新

时间:2019-09-30 14:16:50

标签: flutter google-cloud-firestore

我知道我可以在文档的顶级字段上执行此操作。但是我试图在文档数组内部的字段上运行事务更新。

这是我的“测验”文档的结构:

{
  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 :(得分:0)

  

有可能吗?还是我必须提取整个文档,更新值并替换它?

为了更新Firestore中数组中的字段,您必须获取数组,更新所需的字段,然后更新文档。您可以使用事务来做到这一点。您将在下面找到有关transactions的一些详细信息。

让我知道这是否有帮助。