我正在使用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]
我尝试了这段代码,但它添加了新文档。
答案 0 :(得分:2)
最佳做法是使用交易。 确保文档引用是对要更新的文件的引用。
Firestore.instance.runTransaction((transaction) async {
await transaction.update(
documentReference, data);
};
它将确保更新发生,以防万一客户端正在进行更新。
如果是并发编辑,Cloud Firestore会再次运行整个事务。例如,如果事务读取文档而另一个客户端修改任何这些文档,则Cloud Firestore将重试该事务。此功能可确保事务在最新且一致的数据上运行。
更多信息here
答案 1 :(得分:1)
在更新数据库之前指定文档名称。
Firestore.instance.collection('Products').document('Apple').updateData({ 'price': 120, 'quantity': 15 });
此处我的价格和数量数据是数字。如果你的是字符串,那么就把字符串值放在那里。
答案 2 :(得分:0)
尝试.setData({"fullname": nameController.text, "PhoneNumber": phoneController.text, "adresse": adressController.text}, merge: true)
。
答案 3 :(得分:0)
您需要更新数据才能将其添加到现有文档中。
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'));