Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如果存在,我需要更新文档,否则创建_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase 如果存在,我需要更新文档,否则创建

Firebase 如果存在,我需要更新文档,否则创建,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,如果存在文档,是否有任何方法更新文档,或者创建文档。现在我正在使用update方法,但是如果文档不存在,那么它将抛出一条错误消息 Firestore.instance.collection('partnerRequests').document(user.uid).updateData( { DateTime.now().millisecondsSinceEpoch.toString():partnerRegistrationFormData}) 未处理的异

如果存在文档,是否有任何方法更新文档,或者创建文档。现在我正在使用
update
方法,但是如果文档不存在,那么它将抛出一条错误消息

Firestore.instance.collection('partnerRequests').document(user.uid).updateData( {
                  DateTime.now().millisecondsSinceEpoch.toString():partnerRegistrationFormData})
未处理的异常:类型“PlatformException”不是类型的子类型 “字符串”


我相信答案是这样的:


具体来说,您需要使用方法
.set({dataToSet},{merge:boolean})
,如果文档不存在,它将创建文档,然后您可以通过
merge
选择如果文档已经存在会发生什么(true=更新现有字段并添加新字段,false=覆盖该位置的所有现有数据)

如果您正在调用
updateData()
函数,则仅当
partnerRequests
集合中已存在该文档时,才会更新该文档。如果该特定文档不存在,则
updateData()
调用将失败,您向我们展示的例外情况除外

另一方面,如果您正在调用
setData()
函数:

docRef.setData(data, merge: true)
如果文档不存在,您将创建它;如果文档已经存在,您将更新它。这就是这两个函数的基本区别

回答你的问题:

如果存在,我需要更新文档,否则创建


您肯定应该使用
setData()

您作为示例提供的stackoverflow的答案是针对Firebase实时数据库的,OP正在询问有关Cloud Firestore的问题。Firebase实时数据库和Cloud Firestore是两种不同的产品。它们中的每一个都有不同的方法来更新数据库中的元素。好的,当它更新时,它会删除旧值,例如,文档包含值a1、b1、,c1和我调用setdate,如果新数据只包含fleds a1和b1,是删除c1还是更新a1和b1并保留c1?如果您只想更新某些字段,而不触及其他字段,则使用update(),如我的回答中所述。当然,现在我正在做另一个项目,周末我会检查并接受这个答案。对不起,这是我的错delay@Midhilaj好的,随时通知我。谢谢