未为类型“查询”定义方法“ updateData”。 Futter,Cloud Firestore

时间:2020-08-03 15:53:25

标签: firebase flutter google-cloud-firestore

我想基于查询来更新文档中的数据。这是我的代码:

Firestore.instance
    .collection("Categories")
    .where("userEmail", isEqualTo: "${user?.email}")
    .updateData({"category_budget_remaining": _remainingCategoryBudget2})
    .then((value){});

我遇到以下错误:未为类型“查询”定义方法“ updateData”

3 个答案:

答案 0 :(得分:1)

从API文档中可以看到,where()返回一个Query,而Query没有称为updateData()的方法。所以,您在这里看到的并不奇怪。

Firestore无法像SQL“ update where”命令那样提供批量更新文档的方法。您将要做的是执行查询以更改文档,对结果集中的文档进行迭代,然后分别更新每个文档。是的,它要求每个文档都读取一个要更改的文档,否,没有其他选择。

答案 1 :(得分:1)

where()之后,您需要获取文档然后进行更新

where(...).getDocuments().then((val)=> 
   val.documents.forEach((doc)=> {
     doc.reference.updateData({...})
   });
});

此代码选择并更新适用于where条件的所有文档。如果只想对1个文档执行此操作,则只需在.limitTo(1)之前添加getDocuments()

答案 2 :(得分:0)

我的答案与@Habib Mahamadi相似,但这是实现此功能的正确且唯一的方法,我的答案与众不同,因为firebase更改了功能名称。

Firestore.instance
        .collection("Categories")
        .where("userEmail", isEqualTo: "${user?.email}")
        .updateData({"category_budget_remaining": _remainingCategoryBudget2})
        .then((value)=> value.docs.forEach((element){element.reference.update({"" : ""})});