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好的,随时通知我。谢谢