颤振 |如何将数据添加到 Firestore 中的现有文档

Posted

技术标签:

【中文标题】颤振 |如何将数据添加到 Firestore 中的现有文档【英文标题】:FLUTTER | How to add data to an existing document in firestore 【发布时间】:2018-11-06 14:54:23 【问题描述】:

我正在使用 firestore 来存储我的 Flutter 应用程序的数据,并且我制作了一个功能,在用户登录后自动在 firestore 中创建一个文档 My Firestore database

现在我希望用户在填写此表单时,将数据添加到用户电子邮件所在的同一文档中。

[ RaisedButton(
              child: Text("Submit"),
              onPressed: () 
               final CollectionReference users = Firestore.instance.collection('users');
                Firestore.instance
                    .runTransaction((Transaction transaction) async 
                  CollectionReference reference =
                  Firestore.instance.collection('users');

                  await reference
                      .add("fullname": nameController.text, "PhoneNumber": phoneController.text, "adresse": adressController.text);
                  nameController.clear();
                  phoneController.clear();
                  adressController.clear();

                );,][2]

我尝试了这段代码,但它添加了新文档。

【问题讨论】:

您的问题在于您要更新什么文件。您需要正确引用您的文件。你知道你要更新什么文件吗? 【参考方案1】:

在更新数据库之前指定文档名称。

Firestore.instance
  .collection('Products')
    .document('Apple')
      .updateData(
        'price': 120, 
        'quantity': 15
      );

这里我的价格和数量数据是数字。如果你的是 Strings,则将 String 值放在那里。

【讨论】:

还有instance.collection('users').document('$user.id').setData("fullname": nameController.text, "PhoneNumber": phoneController.text, "adresse": adressController.text); 的选项 setData 将删除现有文档并创建一个新文档。问题不在于那个。这是关于向现有文档添加数据。【参考方案2】:

最佳实践是使用事务。 确保文档引用是对您要更新的文件的引用。

            Firestore.instance.runTransaction((transaction) async 
              await transaction.update(
                  documentReference, data);
            ;

它将确保更新按顺序进行,以防有很多客户端在执行此操作。

在并发编辑的情况下,Cloud Firestore 会再次运行整个事务。例如,如果一个事务读取文档,而另一个客户端修改了这些文档中的任何一个,则 Cloud Firestore 会重试该事务。此功能可确保事务在最新且一致的数据上运行。

更多信息here

【讨论】:

【参考方案3】:

试试.setData("fullname": nameController.text, "PhoneNumber": phoneController.text, "adresse": adressController.text, merge: true)

【讨论】:

updateData() 对我不起作用。我的意思是它有效,但它取代了整个数据。 setData()merge: true 非常适合我。【参考方案4】:

2021 年更新:

您需要更新数据以将其添加到现有文档中。

var collection = FirebaseFirestore.instance.collection('users');
collection 
    .doc('doc_id') // <-- Doc ID where data should be updated.
    .update('age' : 20) // <-- New data
    .then((_) => print('Updated'))
    .catchError((error) => print('Update failed: $error'));

【讨论】:

以上是关于颤振 |如何将数据添加到 Firestore 中的现有文档的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Flutter 将文档创建时间戳添加到 Firestore [重复]

如何使用颤振在 Firebase 云 Firestore 中添加多个节点

使用 Flutter 将表单上传到 Firestore

如何使用 StreamBuilder 将数据从 firebase firestore 检索到颤振中,并使用 ListView.builder 显示值?

如何修复颤振中的“回复已提交的错误”?

从firestore颤振提供程序中的db收集数据时如何初始化一个类